重学java23种设计模式(1)工厂方法模式
2015-07-21 14:48
441 查看
跟着《软件秘笈---设计模式那点事》学习
定义:
工厂方法模式(Factory Method Pattern)
定义一个创建产品对象的工厂接口,让子类决定实例化哪一种实例对象,也就是将创建实例对象的工作推迟到子类当中,核心工厂类不在负责具体产品的创建。
工厂方法模式是对简单工厂模式进行了抽象。如此一来核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这一样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改工厂角色的情况下引进新的产品,工厂方法模式完全实现“开-闭”原则,对扩展开房,对修改关闭。
角色:
抽象工厂
抽象产品
具体工厂
具体产品
类图:
实例:
使用场合:
当子类型可能会有很多,以后需要不断增添不同的子类实现时。
一句话总结:
用继承的方式实现解耦。
定义:
工厂方法模式(Factory Method Pattern)
定义一个创建产品对象的工厂接口,让子类决定实例化哪一种实例对象,也就是将创建实例对象的工作推迟到子类当中,核心工厂类不在负责具体产品的创建。
工厂方法模式是对简单工厂模式进行了抽象。如此一来核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这一样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改工厂角色的情况下引进新的产品,工厂方法模式完全实现“开-闭”原则,对扩展开房,对修改关闭。
角色:
抽象工厂
抽象产品
具体工厂
具体产品
类图:
实例:
/* * 抽象产品 * */ public abstract class AbstractSword { private String name; // 抽象父类构造方法 public AbstractSword() { } public String getName() { return name; } public void setName(String name) { this.name = name; } }
/* * 抽象工厂 * */ public interface ISwordFactory { //返回各种宝刀(返回值是抽象宝刀类型) public AbstractSword createSword(); }
/* * 具体产品 * */ public class QixingSword extends AbstractSword { public QixingSword() { this.setName("七星宝刀"); } }
/* * 具体工厂 * */ public class Caocao implements ISwordFactory { @Override public AbstractSword createSword() { return new QixingSword(); } }
/* * 客户端 * */ public class MainApp { public static void main(String[] args) { //创建曹操实例对象(返回使用接口类型 ISwordFactory) ISwordFactory swordFactory = new Caocao(); //获得宝刀实例-----------七星宝刀 AbstractSword sword = swordFactory.createSword(); //刺杀董卓 System.out.println("曹操使用" + sword.getName() + "刺杀董卓!"); } }
使用场合:
当子类型可能会有很多,以后需要不断增添不同的子类实现时。
一句话总结:
用继承的方式实现解耦。
相关文章推荐
- 关于java.sql.PreparedStatement和com.mysql.jdbc.PreparedStatement的区别
- 多次编辑xml文件后,eclipse内存溢出异常崩溃
- myeclipse自定义注释快捷键
- Java实现数据库连接池的方法
- Java图形界面事件监听处理之四种方法
- Myeclipse的Launching JMSSink(Time of error:October 17,2009 7:22:05 PM GMT+08:00) Reason:Check the det
- java.security.NoSuchProviderException: no such provider: BC 的问题解决
- Java web开发编码设置
- maven报错 错误: 程序包javax.servlet不存在
- Java并发编程:volatile关键字解析
- Java多线程--售票代码
- spring下载地址
- springmvc 表单提交时间字段_springMVC form提交404
- Android开发工具Eclipse自己常用的几个快捷键
- springmvc 返回json数据日期格式化方法
- JAVA中Double与double(Integer&int)之间的区别
- java StringUtils
- java代码的编译和执行过程
- LeetCode java实现ZigZagConversion
- java.lang.IllegalArgumentException:Document base ……does not exist or is not a readable directory错误的解决方案