GOF23设计模式之 工厂模式
来源:互联网 发布:mysql 删除重复值 编辑:程序博客网 时间:2024/05/18 01:07
工厂模式:
- 实现了创建者与调用者的分离
- 核心本质:
- 实例化对象,用工厂方法代替new操作。
- 将选择实现类、创建对象统一管理和控制。从而将调用者跟我们的现实类解耦。
- 详细分类:
- 简单工厂模式
- 用来生产同一个等级结构中的任意产品(对于增加新的产品,需要修改已有代码)
- 工厂方法模式
- 用来生产同一等级结构中的固定产品。(支持增加任意产品)
- 抽象工厂方式
- 用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)
- 简单工厂模式
面向对象设计的基本原则:
- OCP(开闭原则,Open-Closed Principle):一个软件的实体应当对扩展开放,对修改关闭
- DIP (依赖倒转原则,Dependence Inversion Principle):要针对接口编程,不要针对实现编程。
- LoD(迪米特法则,Law of Demeter):只与你直接朋友通信,而避免和陌生人通信。
简单工厂模式(静态工厂模式)代码实现:
/** * Audi和Byd实现了接口Car * @author chang * */public class CarFactory { public static Car creatCar(String type){ if(type.equals("奥迪")){ return new Audi(); }else if(type.equals("比亚迪")){ return new Byd(); }else{ return null; } }}/** * 对比有无工厂模式 * @author chang * */public class Client01 { public static void main(String[] args) {// Car c1 = new Audi();// Car c2 = new Byd(); //通过工厂模式有效的减少了创建Car对象时所要了解的信息。解耦效果明显 Car c1 = CarFactory.creatCar("奥迪"); Car c2 = CarFactory.creatCar("比亚迪"); c1.run(); c2.run(); }}
- 简单工厂模式的另一种实现方式
package com.coderbean.factory.simplefactory;/** * Audi和Byd实现了接口Car * @author chang * */public class CarFactory2 { public static Car createAudi(){ return new Audi(); } public static Car createByd(){ return new Byd(); }}
- 要点:
- 简单工厂模式也叫静态工厂模式,就是工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。
- 对于增加新的产品无能为力!不修改代码的话,是无法扩展的。
工厂方法模式
- 实现代码:
/** * 测试工厂方法模式 * @author chang * */public class Client { //这里CarFactory是一个接口,AudiFactory等都实现了这个接口。 public static void main(String[] args) { Car c1 = new AudiFactory().creatCar(); Car c2 = new BydFactory().creatCar(); c1.run(); c2.run(); }}
- 工厂方法模式要点
- 为了避免简单工厂模式的缺点,不完全满足OCP。
- 工厂方法模式和简单工厂模式最大的不同在于,简单工厂模式只有一个(对于一个项目或者一个独立模块而言)工厂类,而工厂方法模式有一组实现了相同接口的工厂类。
- 简单工厂模式和工厂方法模式的比较
- 结构复杂度(简单工厂优于工厂方法模式)
- 代码复杂度(简单工厂优于工厂方法)
- 客户端编程难度(简单工厂优于工厂方法)
- 管理上的难度(简单工厂优于工厂方法)
- 根据设计理论:建议工厂方法模式。但实际上,我们一般都用简单工厂模式。
抽象工厂模式
- 用来生产不同产品族的全部产品(对于新产品的增加,无能为力;支持增加产品族)
- 抽象工厂模式是工厂方法模式的升级版本,在有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。
- 实现代码:略
工厂模式要点:
- 简单工厂模式(静态工厂模式)
- 虽然某种程度不符合设计原则,但实际使用最多
- 工厂方法模式
- 不修改已有类的前提下,通过增加新的工厂来实现扩展
- 抽象工厂模式
- 不可以增加产品,可以增加唉产品族!
- 应用场景:
- JDK中Calendar的getInstance方法
- JDBC中Connection对象的获取
- Hibernate中SessionFactory创建Session
- Spring中IOC容器创建管理bean对象
- XML解析时的DocumentBuilderFactory创建解析器对象
- 反射中Class对象的
newInstanceI()
0 0
- GOF23设计模式之 工厂模式
- GOF23设计模式之工厂方法模式的实现
- GOF23设计模式之抽象工厂模式的实现
- GOF23之工厂模式理解
- GOF23之工厂模式Demo
- 设计模式GOF23——工厂模式
- GOF23设计模式之简单工厂的实现
- GoF23种设计模式之创建型模式之工厂方法模式
- GoF23种设计模式之创建型模式之抽象工厂模式
- GOF23设计模式之 单例模式
- GOF23设计模式之 建造者模式
- GOF23 设计模式之 适配器模式
- GOF23 设计模式之 代理模式
- GOF23设计模式之 迭代器模式
- GOF23设计模式之 命令模式command
- java设计模式GOF23之创建者模式
- (GOF23设计模式)_简单工厂模式详解
- 【GOF23设计模式】_工厂模式JAVA229-231
- (1.4.5.1)Java编程题——在一个字符串中查找第一个非重复的字符
- ArrayAdapter requires the resource ID to be a TextView问题
- Eclipse修改workspace
- Mining Massive Datasets课程笔记(一)
- Handler最正确的写法(避免内存泄露)
- GOF23设计模式之 工厂模式
- 对Throwable的处理
- gcc原子化操作
- (1.1.7.1)上台阶、硬币问题的算法
- 219 An problem about date【日期的定理】
- windows7 64位编译hadoop2.7.1
- 使用java的DBUtils
- I/O流与异常
- Flume前述