设计模式简介

来源:互联网 发布:淘宝苹果靠谱店铺推荐 编辑:程序博客网 时间:2024/06/10 02:24

面向对象设计模式让你的设计更好的符合面向对象设计的一些原则,更好的解决日益变化的软件需求。 所以我罗列出了面向对象的一些设计原则: 

•“开-闭”原则(Open-Closed Principle,OCP)封装的问题 
 一个软件实体应当对扩展开放,对修改关闭。 你添加新功能的时候应该只是向代码集中添加新的代码不应该修改原来的代码。

•里氏代换原则(Liskov Substitution Principle, LSP) 职责的问题 
LSP原则要求子类可以无条件的替代父类,子类不能对父类没有暴露的接口进行扩展,客户要调用功能只能通过父类暴露的接口来调用用不能擅自向子类调用。

•依赖倒转原则(dependence inversion principle, DIP) 耦合度问题
依赖倒转原则就是要实现依赖于抽象,抽象不要依赖于实现。要针对接口编程,不要针对实现编程。

•合成/聚合复用原则(Composite/Aggregate Reuse Principle或CARP) 复用问题 
在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新的对象通过向这些对象的委派达到复用这些对象的目的。

•迪米特法则(Law of Demeter,LoD) 
一个软件实体应当尽可能少的与其他实体发生相互作用。

•接口隔离原则(interface separate principle, ISP) 职责单一 
使用多个专门的接口比使用单一的总接口要好。也就是说,一个类对另外一个类的依赖性应当是建立在最小的接口上。

     软件行业最早出现的设计模式著作是GOF(Gang Of Fours)四人组所著的那本《设计模式-可复用面向对象软件基础》,这本书将设计模式分为三大类:

 

 

设计模式分类

设计模式依据目的可以分为三类:

-创建型模式(Creational):负责对象创建。

-结构型模式(Structural):处理类与对象间的组合。

-行为型模式(Behavioral):类与对象交互中的职责分配。

 

设计模式按照范围分为两类:

类模式:处理类和子类之间的关系,这些关系通过继承建立,是静态的,在编辑时刻便确定下来了。

对象模式:处理对象间的关系,这些关系在运行时刻是可以变化的,更具有动态性。

 

创建型类模式:将对象的部分创建工作延迟到子类;

创建型对象模式:将对象的部分创建工作延迟到另一个对象中;

结构型类模式:使用继承机制组合类;

结构型对象模式:描述了对象的组装方式;

行为型类模式:使用继承描述算法和控制流;

行为型对象模式:描述一组对象怎样协作完成单个对象无法完成的任务;

 

设计模式编目,未说明类模式的默认为对象模式:

 

创建型:

1、Factory Method(类模式)

定义了一个用于创建对象的接口,让子类决定将哪一个类实例化。Factory Method模式使得一个类的实例化延迟到其子类。

 

2、Abstract Factory

提供一个创建一系列相关或相互依赖的对象的接口,而无需指定它们具体的类。

 

3、Builder

将一个复杂对象结构与它的表示分离,使得同样的构建过程可以创建不同的表示。

 

4、Prototype

用原型实例制定创建对象的种类,并且通过拷贝这个原型来创建的对象。

 

5、Singleton

保证一个类仅有一个实例,并且提供一个访问它的全局访问点。

 

 

结构型:

1、Adapter(类模式)

通过类继承,将一个类的接口转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

 

2、Adapter

通过对象组合,将一个类的接口转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

 

3、Bridge

将抽象部分与它的显示部分分离,使它们都可以独立地变化。

 

4、Composite

将对象组合成树形结构以表示“部分-整体”的层次结构。使得客户对单个对象和复合对象的使用具有一致性。

 

5、Decorator

动态地给一个对象添加一些额外的职责。就扩展功能而言,Decorator模式比生成子类方式更为灵活。

 

6、Facade

为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层的接口,这个接口使得这一子系统更加容易使用。

 

7、Flyweight

运用共享技术有效地支持大量细粒度的对象。

 

8、Proxy

为其他对象提供一个代理以控制对这个对象的访问。

 

 

行为型:

1、Interpreter(类模式)

给定一个语言,定义它的语法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的语句。

 

2、Template Method(类模式)

定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可以重定义该算法的某些特定步骤。

 

3、Chain Of Responsibility

为清除请求的发送者和接受者之间的耦合,而使多个对象都有机会处理这个请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。

 

4、Command

将一个请求封装为一个对象,从而使得可以用不同请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作。

 

5、Iterator

提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。

 

6、Mediator

用一个中介对象来封装一系列的对象交互,中介者使得各对象不需要显式地相互引用,从而使得耦合度降低,而且可以独立地改变它们之间的交互。

 

7、Memento

在不破坏封装性的前提下,捕获一个对象内部的状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到保存状态。

 

8、Observer

定义对象的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象多得到通知并自动刷新。

 

9、State

允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它所属的类。

 

10、Strategy

定义一系列的算法把它们一个个封装起来,并且使它们可以相互替换。本模式使得算法的变化可以独立于使用它的客户。

 

11、Visitor

表示一个作用于某对象结构中的各元素的操作,它使得可以在不改变各元素的类的前提下定义作用于这些元素的新操作。

 

 

设计模式类别

原创粉丝点击