GOF 工厂模式
作者:互联网
GOF 创建型模式 系列文章
目录
参考资料
1. 概述
-
面向对象设计的基本原则
- OCP (开闭原则, Open-Closed Principle) :一个软件的实体应当对扩展开
放,对修改关闭。 - DIP (依赖倒转原则, Dependence Inversion Principle ) :要针对接口编程,
不要针对实现编程。 - LoD (迪米特法则, Law of Demeter ) :只与你直接的朋友通信,而避免和
陌生人通信。
- OCP (开闭原则, Open-Closed Principle) :一个软件的实体应当对扩展开
-
作用:实现了 创建者 和 调用者 的分离
-
核心本质
- 实例化对象,用工厂方法代替new操作
- 将选择实现类、创建对象统一管理和控制。从而将调用者和实现类解耦。
-
分类和使用场景
- 简单工厂(静态工厂)
- 用来生产同一等级结构中的 任意 产品。(对于增加新的产品,需要修改已有代码)
- 工厂
- 用来生产同一等级结构中的 固定 产品。(支持增加任意产品)
- 抽象工厂
- 用来生产不同产品族的 全部 产品。(对于增加新的产品,无能为力;支持增加产品族)
- 简单工厂(静态工厂)
2. 简单工厂
-
简单工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。
- 可以用
if···else if···else
对传入的参数进行判断 - 也可以根据不同的类写不同的创建方法
- 可以用
-
对于增加新产品无能为力!!!不修改代码的话,是无法扩展的。
-
形状类接口及其实现类
public interface Shape { void draw(); } public class Rectangle implements Shape { @Override public void draw() { System.out.println("Inside Rectangle::draw() method."); } } public class Circle implements Shape { @Override public void draw() { System.out.println("Inside Circle::draw() method."); } }
-
简单工厂
- 实现方法一:用
if···else if···else
对传入的参数进行判断来返回不同的对象实例public class ShapeFactory { //使用 getShape 方法获取形状类型的对象 public Shape getShape(String shapeType){ if(shapeType == null){ return null; } if(shapeType.equalsIgnoreCase("CIRCLE")){ return new Circle(); } else if(shapeType.equalsIgnoreCase("RECTANGLE")){ return new Rectangle(); } return null; } }
- 实现方法二:根据不同的类写不同的创建方法来返回不同的对象实例
public class ShapeFactory { public Shape getRectangle(){ return new Rectangle(); } public Shape getCircle(){ return new Circle(); } }
- 实现方法一:用
3. 工厂模式
-
避免简单工厂模式的缺点:不完全满足 OCP开闭原则。
-
工厂模式和简单工厂模式 最大的不同 在于:
- 简单工厂模式只有一个(对于一个项目或者一个独立模块而言)工厂类
- 工厂方法模式有一组实现了相同接口的工厂类。
-
优点:
1、一个调用者想创建一个对象,只要知道其名称就可以了。
2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。
3、屏蔽产品的具体实现,调用者只关心产品的接口。
-
缺点:
每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。
-
工厂模式实现
/* ShapeFactory接口文件 */ public interface ShapeFactory { public Shape getShape(); } /* RectangleFactory.java文件 */ public class RectangleFactory implements ShapeFactory { @Override public Shape getShape(){ return new Rectangle(); } } /* CircleFactory.java文件 */ public class CircleFactory implements ShapeFactory { @Override public Shape getShape(){ return new Circle(); } }
标签:return,GOF,模式,工厂,Shape,new,public 来源: https://blog.csdn.net/fengshiyunyan/article/details/118730224