JAVA设计模式之工厂模式
2015-11-12 19:09
483 查看
工厂模式概念:
实例化对象,用工厂方法代替new操作
工厂模式包括工厂方法模式和抽象工厂模式
抽象工厂模式是工厂方法模式的扩展
工厂模式的意图:
定义一个接口来创建对象,但是让子类来决定哪些类需要被实例化。
工厂方法把实例化的工作推迟到子类中实现
什么情况下适合工厂模式:
有一组类似的对象需要创建
在编码时不能预见需要创建哪种类的实例
系统需要考虑扩展性,不应依赖于产品类实例如何被创建、组合和表达的细节
工厂模式的动机:
项目中的现状:在软件系统中经常面临着“对象”的创建工作,由于需求的变化,这个对象可能随之也会发生改变,但它却拥有比较稳定的接口。为此,我们需要提供一种封装机制来隔离出这个易变对象的变化,从而保持系统中其他依赖该对象不随着需求变化而变化。(做到低耦合)
基于项目现状将代码进行如下设计:
尽量松耦合,一个对象的依赖对象的变化与本身无关
具体产品与客户端剥离,责任分割
工厂方法模式和抽象工厂模式对比:
1. 工厂模式是一种极端情况的抽象工厂模式,而抽象工厂模式可以看成是工厂模式的推广
2. 工厂模式用来创建一个产品的等级结构,而抽象工厂模式是用来创建多个产品的等级结构
3. 工厂模式只有一个抽象产品类,而抽象工厂模式有多个抽象产品类
工厂模式的实现帮助我们:
1. 系统可以在不修改具体工厂角色的情况下引进新的产品
2. 客户端不必关心对象如果创建,明确了职责
3. 更好的理解面向对象的原则、面向接口编程,而不是面向实现编程
View Code
实例化对象,用工厂方法代替new操作
工厂模式包括工厂方法模式和抽象工厂模式
抽象工厂模式是工厂方法模式的扩展
工厂模式的意图:
定义一个接口来创建对象,但是让子类来决定哪些类需要被实例化。
工厂方法把实例化的工作推迟到子类中实现
什么情况下适合工厂模式:
有一组类似的对象需要创建
在编码时不能预见需要创建哪种类的实例
系统需要考虑扩展性,不应依赖于产品类实例如何被创建、组合和表达的细节
工厂模式的动机:
项目中的现状:在软件系统中经常面临着“对象”的创建工作,由于需求的变化,这个对象可能随之也会发生改变,但它却拥有比较稳定的接口。为此,我们需要提供一种封装机制来隔离出这个易变对象的变化,从而保持系统中其他依赖该对象不随着需求变化而变化。(做到低耦合)
基于项目现状将代码进行如下设计:
尽量松耦合,一个对象的依赖对象的变化与本身无关
具体产品与客户端剥离,责任分割
工厂方法模式和抽象工厂模式对比:
1. 工厂模式是一种极端情况的抽象工厂模式,而抽象工厂模式可以看成是工厂模式的推广
2. 工厂模式用来创建一个产品的等级结构,而抽象工厂模式是用来创建多个产品的等级结构
3. 工厂模式只有一个抽象产品类,而抽象工厂模式有多个抽象产品类
工厂模式的实现帮助我们:
1. 系统可以在不修改具体工厂角色的情况下引进新的产品
2. 客户端不必关心对象如果创建,明确了职责
3. 更好的理解面向对象的原则、面向接口编程,而不是面向实现编程
工厂模式代码示例
public class Test { public static void main(String[] args) { // HairInterface left = new LeftHair(); // left.draw(); // HairInterface right = new RightHair(); // right.draw(); // // HairInterface left = new HairFactory().getHair("left"); // left.draw(); // HairInterface right = new HairFactory().getHairByClass("com.wzy.Factory_model.RightHair"); // right.draw(); /**根据 * * 利用配置文件,根据索引来得到对象**/ HairInterface hair = new HairFactory().getHairByClasskey("in"); hair.draw(); } }
View Code
相关文章推荐
- (转)Eclipse中使用Ant
- java泛型(二)--泛型的擦除
- java timer缺陷
- myeclipse自动生成hibernate映射文件的过程
- Spring 4.x框架中的新特性---4.1中的新功能和提升
- Java 自定义注解及利用反射读取注解
- Java匿名内部类
- java初学第一天之:安装及记事本编程
- (java)Reverse Linked List
- Spring对JDBC的支持 Jdbc Template模板类
- (java)Majority Element
- 配置Java Web中文乱码的过滤器
- eclipse 同一个package 有的文件 中文乱码,有的文件中文正常
- Struts2 学习系列 (3) 跳转类型与通配符映射
- (java)leetcode Number of 1 Bits
- loadrunner之java协议脚本编写
- Google Java编程风格指南
- 数组和List之间的转换
- Jmeter插件——Java实现thrift客户端
- POJ 2081 JAVA