1. 程式人生 > >4.抽象工廠模式

4.抽象工廠模式

功能 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.抽象工廠模式