设计模式——第一章工厂模式

设计模式

一、7大设计原则

1.1 单一职责原则

? 一个对象应该只包含单一的职责,并且该职责被完整的封装到一个类中

1.2 开闭原则

? 软件实体应该对扩展开放,对修改关闭

1.3里氏替换原则

? 所有引用基类的地方必须能透明的使用其子类对象

1.4依赖倒转原则

? 高层模块不应该依赖底层模块,他们都应该依赖抽象,抽象不应该依赖细节,细节应该依赖于抽象

1.5 接口隔离原则

? 客户端不应该依赖他那些不需要的接口

1.6 合成复用原则

优先使用对象组合,而不是通过继承达到复用的目的

1.7 迪米特法则

每一个软件单位对其他单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位

二、工厂模式

2.1 简单工厂 模式

2.1.1简单工厂模式实现

抽象产品: 将要批量生产的对象实体进行一个抽象提取,便于扩展更多实体

具体产品:继承抽象产品,将产品实例化:比如(披萨是抽象产品,实例化产品可以是各种口味的披萨,胡椒味,麻辣味等等)

工厂类:简单工厂的核心,根据用户传入不同参数来创建不同类型的产品对象。比如(传入胡椒味,创建胡椒味具体的实例对象),若要添加新的产品生产,只用添加一个实体类,在工厂类的静态工厂方法中添加一个else if 即可。

具体客户端使用:传入不同参数,创建不同实体类

2.1.2 简单工厂模式优缺点

? 优点:简单工厂实现了对象创建和使用的分离,客户端无需知道创建的具体类名,只需知道要传的参数即可得到对象。实现了解耦

? 缺点:使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构,扩展困难,一旦实体类多了,要扩张就会修改工厂的逻辑,不利于维护。适用于那种创建对象较少,业务逻辑简单的情况。

2.2 工厂方法模式

2.2.1工厂方法模式结构

(1)Product(抽象产品):它是定义产品的一个接口,是工厂方法模式所创建对象的超类型,公共父类

(2)ConcreteProduct(具体产品):对抽象产品的一个具体实现。

(3)Factory(抽象工厂):声明了一个工厂方法,用于返回一个抽象产品。(核心)

(4)ConcreteFactory(具体工厂) : 是抽象工厂的子类,返回一个具体产品

2.2.1 工厂方法模式实现

(1)抽象工厂 :对具体工厂进行的一个统一抽象,便于后面的扩展

(2)具体工厂:返回工厂的具体产品

2.2.2 工厂方法模式优缺点

(1)优点 :系统中加入新产品时,只要添加一个具体的工厂和具体产品即可,系统的扩展性提高了,符合开闭原则

(2)缺点: 当产品类增加的时候,要添加的具体工厂类也要随着增加,增加了系统的复杂度,给系统也带来了额外的开销。多了一个抽象工厂,增加了系统的抽象性和理解难度。

2.3抽象工厂模式

2.3.1抽象工厂模式结构图

设计模式——第一章工厂模式

2.3.2 抽象工厂模式实现

抽象工厂类

具体工厂类

2.3.3 抽象工厂模式优缺点

优点:隔离了具体类的生成,使得客户端并不需要知道什么被创建;当一个产品族中的多个对象被设计成一起工作时,它能保证客户端只使用同一个产品族中的对象;增加新产品族很方便,无需修改已有系统,符合开闭原则。

缺点:主要是增加新的产品等级结构麻烦,需要对原有系统进行较大的修改,甚至需要修改抽象层代码,违背了开闭原则。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年9月4日
下一篇 2020年9月4日

相关推荐