-
3w-what: 属于创建型模式,使用同一个接口指向创建的对象,对客户端屏蔽创建对象的逻辑 3w-why: 简化创建逻辑(屏蔽创建过程) 3w-how: 可以使用简单工厂模式,工厂方法模式,抽象工厂模式实现
-
又名静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一,简单工厂模式是工厂模式家族中最简单实用的模式
-
具体的创建工作由子类去实现,基类提供统一接口 又称多态性工厂模式。在工厂方法模式中,核心的工厂类不再负责所有的产品的创建,而是将具体创建的工作交给子类去做。 该核心类成为一个抽象工厂角色,仅负责给出具体工厂子类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。
- 模拟场景:java,pyhon课程的创立
- 代码实现:见factory模块com.liyueze.factoryMethod包和com.liyueze.common包
- 测试类:在factory模块test下
- 类图:
虚线箭头:指向依赖,依赖是对象之间最弱的一种关联方式,是临时性的关联。代码中一般指由局部变量、函数参数、返回值建立的对于其他对象的调用关系。一个类调用被依赖类中的某些方法而得以完成这个类的一些职责
虚线三角:指向泛型(接口)
实线三角:指向继承 - 优点:解决了简单工厂的问题,加入新产品符合开闭原则(只需要继承工厂基类并重写创建方法)
- 缺点:增加了代码结构的复杂度与理解难度
- 适宜场景:产品结构不稳定,常常需要扩展
- 模拟场景:java,pyhon课程的创立
-
提供一个创建一系列相关或相互依赖对象的接口,无须指定他们具体的类。 创建的对象需要多个维度确定
- 模拟场景:创建数学系和计算机系的java,pyhon课程(课程需要系别[数学,计算机]和种类[java,python]两个维度确定)
- 思路:创建系别工厂基类,定义课程种类(java课程,python课程)创建方法,并交给实现类(数学系工厂,计算机系工厂)去实现具体生成的课程
- 代码实现:见factory模块com.liyueze.abastractFactory包和com.liyueze.common包
- 测试类:在factory模块test下
- 类图:
虚线箭头:指向依赖,依赖是对象之间最弱的一种关联方式,是临时性的关联。代码中一般指由局部变量、函数参数、返回值建立的对于其他对象的调用关系。一个类调用被依赖类中的某些方法而得以完成这个类的一些职责
虚线三角:指向泛型(接口) - 优点:将一个维度的产品统一到一起创立
- 缺点:增加了代码结构的复杂度与理解难度,并且违背开闭原则(例如上例中每个系加入新的C++课程,就需要修改系别工厂代码。但是如果加入新的系只扩展不用修改)
- 适宜场景:产品结构复杂存在相互依赖
- 注意:尽量将不易变化的维度放在工厂内部的方法去创建(例如上例中课程种类不易变化),将易变化的维度充当工厂基类(例如上例中系别易变化)
- 模拟场景:创建数学系和计算机系的java,pyhon课程(课程需要系别[数学,计算机]和种类[java,python]两个维度确定)
-
-
Notifications
You must be signed in to change notification settings - Fork 0
liyzzz/DesignPattern
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
About
设计模式
Topics
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published