超简代码版设计模式系列七
2014-01-19 22:38
169 查看
工厂模式:封装对象的创建
今天时间充裕点,把这个内容较多的工厂模式写一下。话说我刚毕业那会儿,没有网络可以找资料。抱着编程的书看到工厂类的时候,怎么也理解不了为什么要这么干。明明有直路,为什么要绕个弯。那个时候太单纯,理解不了这个世界的复杂性和需求的多样性。图样图森破,呵。即便现在说来,工厂模式也是会增加代码行数和复杂度的。但是我们需要这么做。尤其是搭配反射之类的高级语言特性,我们可以达到不更新代码就能替换或扩展应用的目的。——创建未知的对象,这才是“工厂”的意义所在。扯的有点远,还是贴代码吧。
1.简单工厂方法
public class SimpleClassFactory {
public static Product createProduct(String type){
Product p=null;
if(type.equals("a")){
p=new ProductA();
}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{}
//抽象工厂用于创建产品家族或相关产品集合。其中的每个创建方法都可以用工厂方法来实现。
今天时间充裕点,把这个内容较多的工厂模式写一下。话说我刚毕业那会儿,没有网络可以找资料。抱着编程的书看到工厂类的时候,怎么也理解不了为什么要这么干。明明有直路,为什么要绕个弯。那个时候太单纯,理解不了这个世界的复杂性和需求的多样性。图样图森破,呵。即便现在说来,工厂模式也是会增加代码行数和复杂度的。但是我们需要这么做。尤其是搭配反射之类的高级语言特性,我们可以达到不更新代码就能替换或扩展应用的目的。——创建未知的对象,这才是“工厂”的意义所在。扯的有点远,还是贴代码吧。
1.简单工厂方法
public class SimpleClassFactory {
public static Product createProduct(String type){
Product p=null;
if(type.equals("a")){
p=new ProductA();
}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{}
//抽象工厂用于创建产品家族或相关产品集合。其中的每个创建方法都可以用工厂方法来实现。
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 设计模式之创建型模式
- 介绍php设计模式中的工厂模式
- 面向对象设计模式的核心法则
- 常见的PHP五种设计模式小结
- 小议javascript 设计模式 推荐
- javascript 设计模式之单体模式 面向对象学习基础
- 最常用的12种设计模式小结
- php设计模式 Command(命令模式)
- php设计模式介绍之值对象模式第1/5页
- 设计模式之构建(Builder)模式 建造房子实例分析
- Javascript 设计模式(二) 闭包
- javascript学习笔记(九) js对象 设计模式
- ASP.NET的适配器设计模式(Adapter)应用详解
- PHP设计模式之调解者模式的深入解析
- js如何实现设计模式中的模板方法
- 设计模式中的备忘录模式解析及相关C++实例应用
- 代理角色java设计模式之静态代理详细介绍