抽象工廠模式-java實現

抽象工廠模式

Provide an interface for creating families of related or dependent objects without specifying their concrete classes.爲創建一組相關或相互依賴的對象提供一個接口,而且無需制定它們的具體類。

抽象工廠模式的類圖

abstract_factory.png

代碼參考

 /**
* 抽象產品A
*/
public abstract class AbstractProductA{
   public abstract void method();
}

/**
* 抽象產品B
*/
public abstract class AbstractProductB{
   public abstract void method();
}

/**
* 具體產品A1
*/
public class ConcreteProductA1 extends AbstractProductA{

   @Override
   public void method() {
       System.out.println(getClass().getSimpleName()+".method");
   }
}
/**
* 具體產品A2
*/
public class ConcreteProductA2 extends AbstractProductA{

   @Override
   public void method() {
       System.out.println(getClass().getSimpleName()+".method");
   }
}

/**
* 具體產品B1
*/
public class ConcreteProductB1 extends AbstractProductB{

   @Override
   public void method() {
       System.out.println(getClass().getSimpleName()+".method");
   }
}

/**
* 具體產品B2
*/
public class ConcreteProductB2 extends AbstractProductB{

   @Override
   public void method() {
       System.out.println(getClass().getSimpleName()+".method");
   }
}

/**
* 抽象工廠
*/
public abstract class AbstractFactory{
   public abstract AbstractProductA createProductA();
   public abstract AbstractProductB createProductB();
}

/**
* 具體的工廠1
*/
public class ConcreteFactory1 extends AbstractFactory{

   @Override
   public AbstractProductA createProductA() {
       return new ConcreteProductA1();
   }

   @Override
   public AbstractProductB createProductB() {
       return new ConcreteProductB1();
   }
}

/**
* 具體的工廠2
*/
public class ConcreteFactory2 extends AbstractFactory{

   @Override
   public AbstractProductA createProductA() {
       return new ConcreteProductA2();
   }

   @Override
   public AbstractProductB createProductB() {
       return new ConcreteProductB2();
   }
}

public static void main(String[] args){
  AbstractFactory factory1 = new ConcreteFactory1();
   factory1.createProductA().method();
   factory1.createProductB().method();

   AbstractFactory factory2 = new ConcreteFactory2();
   factory2.createProductA().method();
   factory2.createProductB().method();
}

抽象工廠的角色

  • AbstractProduct: 抽象的產品,一般有固定多個。
  • ConcreteProduct: 產品的實現。
  • AbstractFactory: 抽象工廠,定義一組創建產品的方法,每個方法對應創建一箇中產品。
  • ConcreteFactory:具體的實現,創建具體的產品對象

抽象工廠的特點

  • 優點就是分離接口和實現。
  • 缺點是就是創建的類比較大,擴充產品的時候比較困難。

參考

  • 《設計模式之禪》
  • 《Android源碼設計模式解析實戰》
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章