设计模式之工厂方法模式
来源:互联网 发布:常见设计模式 java 编辑:程序博客网 时间:2024/06/05 16:51
模式定义:
定义一个创建产品对象的工厂接口,让子类决定实例化哪一种实例对象。将实际创建实例对象的工作延迟到子类当中,核心工厂类不再负责具体产品的创建。
工厂方法模式是对简单工厂模式的抽象。好处是可以使系统在不修改工厂角色的情况下引进新
的产品。属于创建型模式。
遵循原则:
开闭原则
依赖倒置
适用场合:
(1)当子类型可能很多,以后需要添加不同的子类实现时;
(2)当一个系统还在设计阶段,还不知道将来需要实例化哪些具体类时;
(3)系统设计之初不需要知道具体对象的概念或者不知道。
知识扩展:
JDK的List、LinkedList、ArrayList就有工厂方法的影子。List返回一个iterator接口
LinkedList、ArrayList返回具体的迭代器。
定义抽象产品
/**
* 定义抽象宝刀
* @author 熊诗言
*
*/
public abstract class AbstractSword {
private String name;
public AbstractSword() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
两种具体的宝刀
public class QixingSword extends AbstractSword {
public QixingSword() {
this.setName("七星宝刀");
}
}
public class BaxingSword extends AbstractSword {
public BaxingSword() {
this.setName("八星宝刀");
}
}
定义一个产生产品的工厂接口,生产的产品是抽象的
public interface ISwordFactory {
public AbstractSword createSword();
}
定义两个具体的工厂
public class CaoCao implements ISwordFactory {
@Override
public AbstractSword createSword() {
// TODO Auto-generated method stub
return new QixingSword();
}
}
public class CaoCao2 implements ISwordFactory {
@Override
public AbstractSword createSword() {
// TODO Auto-generated method stub
return new BaxingSword();
}
}
客户端
就可以面向接口编程
public class MainApp {
public static void main(String[] args) {
// ISwordFactory isf = new CaoCao();
// AbstractSword as = isf.createSword();
// System.out.println("曹操使用 "+as.getName()+" 刺杀董卓");
ISwordFactory isf = new CaoCao2();
AbstractSword as = isf.createSword();
System.out.println("曹操2使用 "+as.getName()+" 刺杀董卓");
}
}
- 设计模式之工厂方法
- 设计模式之工厂方法
- 设计模式 之 工厂方法
- 设计模式 之 工厂方法
- 设计模式之工厂方法
- 设计模式之工厂方法
- 设计模式之工厂方法
- 设计模式之工厂方法
- 设计模式之工厂方法
- 设计模式之工厂方法
- 设计模式之工厂方法
- 设计模式之工厂方法
- 设计模式之工厂方法
- 设计模式之工厂方法
- 设计模式之工厂方法
- 设计模式之工厂方法
- 《设计模式》之工厂方法
- 设计模式之--工厂方法
- jQuery-事件体系和回调系统
- ios读书笔记
- 天气预报接口api(中国天气网)
- JS中showModalDialog 详细使用
- 深入理解 Java中的 流 (Stream)
- 设计模式之工厂方法模式
- Http协议对于java和asp.net的异同
- Ecliplse 指定JRE
- C++ 14观察者模式
- [转载]代码虚拟化
- Python模块学习系列(2)----struct
- 去除源文件中的重复行的程序流程及其C代码实现
- 提高mysql千万级大数据SQL查询优化30条经验(Mysql索引优化注意)
- 11g RAC基于服务端的TAF,遇到会话failover到其他节点,但是VIP未漂