设计模式
一、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进行处理,非常感谢!