工厂模式:封装对象的创建
今天时间充裕点,把这个内容较多的工厂模式写一下。话说我刚毕业那会儿,没有网络可以找资料。抱着编程的书看到工厂类的时候,怎么也理解不了为什么要这么干。明明有直路,为什么要绕个弯。那个时候太单纯,理解不了这个世界的复杂性和需求的多样性。图样图森破,呵。即便现在说来,工厂模式也是会增加代码行数和复杂度的。但是我们需要这么做。尤其是搭配反射之类的高级语言特性,我们可以达到不更新代码就能替换或扩展应用的目的。——创建未知的对象,这才是“工厂”的意义所在。扯的有点远,还是贴代码吧。
1.简单工厂方法
public class SimpleClassFactory {
public static Product createProduct(String type){
Product p=null;
if(type.equals("a")){
}else if(type.equals("b")){
p=new ProductB();
}
return p;
}
}
public class Product {}
public class ProductA extends Product{}
public class ProductB extends Product{}
2.工厂方法:定义了创建产品的接口,由子类工厂分别去创建产品
public abstract class BaseFactory{
abstract Product createProduct(String type);
}
public class FactoryA extends BaseFactory{
Product p=null;
public Product createProduct(String type){
p=new ProductA();
return p;
}
}
public class FactoryB extends BaseFactory{
Product p=null;
public Product createProduct(String type){
p=new ProductB();
return p;
}
}
public class Product {}
public class ProductA extends Product{}
public class ProductB extends Product{}
3.抽象工厂方法:提供一个接口,用于创建相关或依赖对象的产品家族
public interface AbstractFactory {
public ProductA createProductA();
public ProductB createProductB();
}
public class ConcreteFactory1 implements AbstractFactory{
public ProductA createProductA(){
return new ProductA_1();
}
public ProductB createProductB (){
return new ProductB_1();
}
}
public class ConcreteFactory2 implements AbstractFactory{
public ProductA createProductA(){
return new ProductA_2();
}
public ProductB createProductB (){
return new ProductB_2();
}
}
public class ProductA_1 extends ProductA{}
public class ProductB_1 extends ProductB{}
public class ProductA_2 extends ProductA{}
public class ProductB_2 extends ProductB{}
//抽象工厂用于创建产品家族或相关产品集合。其中的每个创建方法都可以用工厂方法来实现。