4.抽象工廠模式
阿新 • • 發佈:2017-09-02
功能 ava 實例化 brush 抽象工廠 log () actor 化工
1.抽象的產品類
//不變 public abstract class AbstractProductA { //偽代碼,具體功能按照實際 需求添加方法 } //不變 public abstract class AbstractProductB { }
2.抽象的工廠類
//不變 public abstract class AbstractFactory { public abstract AbstractProductA CreateProductA(); public abstract AbstractProductB CreateProductB(); }
3.客戶端的程序
//不變 public class Client { private AbstractFactory factory; public Client(AbstractFactory factory){ this.factory=factory; } public AbstractProductA GetProductA(){ return this.factory.CreateProductA(); } public AbstractProductB GetProductB(){ return this.factory.CreateProductB(); } }
至此,以上都是應用抽象工廠基本不變的代碼。接下來就是具體的實現類,也就是根據變化的需求給出變化的代碼
4.具體產品類
public class ProductA1 extends AbstractProductA{ } public class ProductA2 extends AbstractProductA { } public class ProductB1 extends AbstractProductB { } public class ProductB2 extends AbstractProductB { }
5.具體工廠類
public class FactoryA extends AbstractFactory { @Override public AbstractProductA CreateProductA() { return new ProductA1(); } @Override public AbstractProductB CreateProductB() { // TODO Auto-generated method stub return new ProductB1(); } } public class FactoryB extends AbstractFactory { @Override public AbstractProductA CreateProductA() { // TODO Auto-generated method stub return new ProductA2(); } @Override public AbstractProductB CreateProductB() { // TODO Auto-generated method stub return new ProductB2(); } }
6.應用
AbstractFactory factory=new FactoryA();//讀取配置文件 Client client=new Client(factory); client.GetProductA(); client.GetProductB();
//實際應用中,只需要把實例化工廠類的代碼改成讀取配置文件,那以後如果要新增產品,那只需要新增具體的產品類和工廠類,並修改下配置文件,就整體替換了。
4.抽象工廠模式