设计模式

什么是设计模式:

设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用重用代码、让代码更溶液为他人理解、保证代码可靠性。

设计模式依据设计原则来设计从而达到软件的设计目标(可复用,可维护,可扩展)

什么是GOF:

在1994年,由Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四人合著出版了一本名为《Design Patterns – Elements of Reusable Object-Oriented Software》(中文名:设计模式-可复用的面向对象软件元素)的书,该书首次为提到了软件开发中设计模式的概念(23种设计模式)。

四位作者合称GOF(四人帮,全拼:Gang of Four),他们所提出的设计模式主要是基于以下的面向对象设计原则。

a、 对接口编程而不是对实现编程。

b、 优先使用对象组合而不是继承。

软件设计目标:

一、可复用

可复用是指软件的某些类库可以在不同的软件中重用,比如大家经常写的模型层的类库工程即可以用在不同的项目使用。这样可以提高开发效率,减少重复开发

二、可维护

可维护是指需求有变化或者需要给软件增减一些功能的时候,只需要修改的地方,冰球修改的地方不影响其他已有的功能。这样可以达到减少软件功能增减的时候代码的复杂度以及减少软件的重新测试时间

三、可扩展

可扩展是指对软件的功能便于扩展,比如我们的软件刚开始只支持一个数据库,现在客户要求可以支持多个数据库,对这种扩展,如果刚开始设计软件的时候就有考虑比如通过文件的配置修改就可以做到,那么这就说明软件非常容易扩展,还有就是好多的软件通过插件的形式提供对本身的功能进行扩展。

如何达到软件设计原则:

一、规范文档的设计(重点)

二、规范系统接口

三、良好的系统架构设计

四、通过一些技巧性的代码,设计模式是手段之一

软件设计模式:

一、设计原则:

1、 单一职责原则

就是一个类而言,对应仅有一个引起它变化的原则

也就是说,不要把变化原因个不相同的职责放在一起,因为不同的变化会影响到不相干的职责,通俗讲不需要那你管的事情不要管

例如:在页面中不应出现操作DB的代码

2、 开闭原则

软件的实体(类、模块、函数等)应该是可以扩展的,但是不可以修改

开闭原则的“开”是指对功能的扩展是开放的,而“闭”指的是扩展功能通过修改原来的代码来达到封闭的,是应该避免的

例如:通过继承来扩展功能,但没有修改代码

3、 接口隔离原则

不应该强迫客户依赖于它们不用的方法。接口属于客户,不属于它所在的类层次结构

只提供用户能操作的类

4、 里氏替换原则

任何基类可以出现的地方,子类一定可以出现。

子类型必须能替换基类型,也就是说能用基类的地方可以用子类型

5、 依赖倒转原则

抽象不应该依赖细节,细节应该依赖于抽象

关于这个原则,还有种说法是“高层不应该依赖于底层”,两者都应该依赖于抽象 这句话简单的说就是说需要依赖一个稳定的东西,在类的设计中什么最稳定?一般来说就是接口与抽象类。

例如:就像电脑中的主板上有很多的接口,有放置CPU的接口,有放置显卡的接口,而那些显卡厂商、CPU厂商只需要生产出满足主板的接口要求的显卡与CPU(比如多少个针脚、多长、多宽等)就可以用在电脑上了。这样我们的主板就可以使用任何的CPU与显卡。而不用一定只能使用某个特定厂商的CPU与显卡。这远比那些集成显卡,CPU主板要好,因为只要这样集成的主板的显卡部件坏了,我们必须更换整个主板,而非集成模式的主板,只需要更换坏掉的显卡就可以了。

6、 迪米特法则

一个软件实体应当尽可能少地于其他实体发生相互作用

能读懂UML类图

简单工厂

一、简单工厂并不是GOF所著的书中提出的一种设计模式,但这种模式是学习设计模式一个很好的入口点,让我们能更容易理解设计模式是如何达到程序设计的

简单化工厂的应用

简单工厂主要是解决对象的创建问题,只能应用于单个产品有多个分支的情况,不行影多个产品多个分支情况。

工厂方法

一、简单工厂中存在的问题是,如果分支多了,就必须修改工厂类,这违反了开闭原则,而工厂方法可以很好的解决这个问题。

二、工厂方法的定义为“定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到子类”

工厂方法设计模式

UML类图:

 

简单工厂与工厂方法比较

简单工厂中产品对象的创建是由工厂类本身来处理,如果对象的种类号的时候,就必须修改工厂类本身,这样就违反了开闭原则。

而工厂方法中对象的创建是由客户端(Program)来选择,这种模式可以不用预先知道具体会有多少个型号,当有新增的产品型号时只需要增加相关的对象类型以及增加相应的一个工厂的子类,这种方式就很好的遵循了开闭原则。

抽象工厂

提供一系列相互依赖的对象的创建工作

封装对象常规的创建方法

提供统一调用数据访问方法的方式

组成结构

1、抽象工厂:抽象工厂生产抽象产品

2、具体工厂:具体工厂生产具体产品

3、抽象产品:定义产品不负责实现,一般定义为接口

4、具体产品:负责产品具体功能的实现

原文地址:https://www.cnblogs.com/rldjy/p/9945803.html