设计模式简述

 面向对象的五大原则:单一职责、接口隔离、开放-封闭、替换、依赖倒置

单一职责:一个是避免相同的职责分散到不同的类中,另外一个是避免一个类承载太多职责。

接口隔离:定制化服务设计的原则。

开放-封闭:模块支持开放和扩展、对模块扩展不影响原有程序。

替换原则:子类型必须能够替换他们的父类型,并出现在父类能够出现的任何地方。

依赖倒置:上层模块和下层模块不应该依赖于下层模块,他们共同依赖于 一个抽象

1、外观模式:

UML图:

说明:

通过在必需的逻辑和方法的集合前创建简单的外观接口,外观设计模式隐藏了调用对象的复杂性。

外观设计模式和建造者模式非常相似,建造者模式一般是简化对象的调用的复杂性,外观模式一般是简化含有很多逻辑步骤和方法调用的复杂性。

 参考文章:http://www.cnblogs.com/wy0314/p/4771135.html


 2、装饰器模式

UML图:

说明:

装饰器模式(Decorator),可以动态地添加修改类的功能

一个类提供了一项功能,如果要在修改并添加额外的功能,传统的编程模式,需要写一个子类继承它,并重新实现类的方法

使用装饰器模式,仅需在运行时添加一个装饰器对象即可实现,可以实现最大的灵活性


3、委托模式

UML图

通过分配或者委托至其他对象,委托设计模式能够去除核心对象中的判断和复杂的功能性。

参考文章:http://www.jb51.net/article/79349.htm


4、工厂模式

UML图

工厂设计模式提供获取某个对象的新实例的一个借口,同事使调用代码避免实际实例化基类的步骤。

参考文章:http://www.cnblogs.com/wangtao_20/p/3594192.html


5、解释器模式

UML图

解释器模式用于分析一个实体的关键元素,并对针对每个元素都提供自己的解释或相关呢的动作。

比如PHP的模板引擎 就是非常常见的一种解释器模


6、迭代器模式

UML图

迭代器设计模式可以帮助构造特性对象,那些对象能够提供单一标准接口或者迭代任何类型的可计数数据。


7、中介者模式

UML图

       1、如果一组对象之间的通信方式比较复杂,导致相互依赖,结构混乱,可以采用中介者模式

       2、如果一个对象引用很多对象,并且跟这些对象交互,导致难以复用该对象

  3、中介者模式用于开发一个对象,这个对象能在类似对象相互之间不直接交互的情况下传输或调用对这些对象的修改。

参考文章:http://www.tuicool.com/articles/2qEvErr


8、观察者模式

UML图

观察者设计模式能够更便利的创建查看目标对象状态的对象,并且提供与核心对象非耦合的指定功能性。(插件系统)

例:集成最新功能的一个活动流,它能够在主页上显示最近的购买情况,这种功能希望人们单击最近出售的商品,从而使其可能购买相同的产品。


9、原型模式

UML图

编程人员牢记:对象小型化、模块化、非耦合以及流线型。

 10、原型模式:通过复制已经存在的对象来创建新对象。

 通过原型实例指定创建对象的种类,并且通过copy这些原型创建信的对象
 是创建型模式
 有的时候创建一个对象有很多步骤才算是完成一个完整的创建过程,我要再创建一个的话,还得从头开始,不如复制,使用原型模式实现。
 原型模式还可以某个对象在运行中的状态

11、策略模式
 
UML图

 12、代理模式

代理设计模式构建了透明于两个不同对象之内的一个对象, 从而能够截取或代理这两个对象之间的通信或访问。

外观模式PK中介者模式:

1.外观模式是结构型模式,中介者模式是行为型模式。
2.外观模式是对子系统提供统一的接口,中介者模式是用一个中介对象来封装一系列同事对象的交互行为。
3.外观模式协议是单向,中介者模式协议是双向

4.外观模式所有的请求处理都委托给子系统完成,而中介者模式则由中心协调同事类和中心本身共同完成业务。

外观模式PK代理模式:

1.代理模式中的代理角色和真实角色都继承于同一类。而外观模式是多个类的集合。

2.代理角色与真实角色接口相同,功能一致,代理角色实现的是真实角色的功能。外观者模式的子系统功能不同,根据用户不同需要与外观类统一配置。

代理模式PK中介者模式:

1.代理模式是一对一,一个代理只能代表一个对象。中介者模式则是多对多,中介者的功能多样,客户也可以多个。

2.只能代理一方。如果PB是A的代理,那么C可以通过PB访问A,但是A不能通过PB访问B。对于中介者模式而言,A可以通过中介访问B,B也可以通过中介访问A。

13、代理模式

 14、建造者模式

依赖注入

控制反转(IOC)是一种思想,依赖注入(DI)是实施这种思想的方法。

  • 依赖注入是从应用程序的角度在描述,可以把依赖注入,即:应用程序依赖容器创建并注入它所需要的外部资源;

  • 而控制反转是从容器的角度在描述,即:容器控制应用程序,由容器反向的向应用程序注入应用程序所需要的外部资源。

原文地址:https://www.cnblogs.com/yifan72/p/6898766.html