快速了解26种设计模式和常见的设计思想

First Post:

Last Update:

快速了解26种设计模式和常见的设计思想

设计模式的不同类型

创建型

创建型模式(Creational Pattern):对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。

结构型

结构型模式(Structural Pattern):关注于对象的组成以及对象之间的依赖关系,描述如何将类或者对象结合在一起形成更大的结构,就像搭积木,可以通过简单积木的组合形成复杂的、功能更为强大的结构。

行为型

行为型模式(Behavioral Pattern):关注于对象的行为问题,是对在不同的对象之间划分责任和算法的抽象化;不仅仅关注类和对象的结构,而且重点关注它们之间的相互作用。

创建型设计模式

工厂模式(Factory Pattern),

抽象工厂模式(Abstract Factory Pattern)

单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点。

建造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。该模式实现了一个原型接口,该接口用于创建当前对象的克隆。

结构型模式

适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。

装饰模式(Decorator),动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。

代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。

外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。外观类需要了解所有的子系统的方法或属性,进行组合,以备外界调用。

桥接模式(Bridge),将抽象部分与它的实现部分分离,使它们可以独立地变化。实现指的是抽象类和它的派生类用来实现自己的对象。实现的方式有多种,桥接模式的思想就是把这些实现独立出来,让它们各自的变化,这样就使得每种实现的变化不会影响其他实现,从而达到应对变化的目的。实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们的耦合。桥接模式是合成/聚合原则的完美体现。

组合模式(Composite Pattern)依据树形结构来组合对象,用来表示部分以及整体层次。组件模式是将独立的功能点做一个封装,便于增删和管理。

享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。运用共享技术有效地支持大量细粒度的对象。

行为型模式

策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。策略模式封装了“变化“

模板模式(Template Pattern)就是通过抽象类来定义一个逻辑模板,逻辑框架、逻辑原型,然后将无法决定的部分抽象成抽象类交由子类来实现。定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。

观察者模式(Observer Pattern)定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。当这个主题对象状态发生改变时,会通知所有的观察者对象,使他们能够自动更新自己。所以也称之为发布-订阅模式(Publish/Subscribe)。

迭代器模式(Iterator Pattern)式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。提供一种方法顺序访问一个聚合对象中各个元素,而又无须暴露该对象的内部表示。

责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。

命令模式(Command Pattern)是一种数据驱动的设计模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。

备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。

在状态模式(State Pattern)中,类的行为是基于它的状态改变的。在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的context对象。允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。

在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。主要将数据结构与数据操作分离。主要解决:稳定的数据结构和易变的操作耦合问题。

中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在SQL解析、符号处理引擎等。给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。

设计思想与设计原则

开闭原则(Open Closed Principle)一个软件实体,如类、模块和函数应该对扩展开放,对修改关闭。

单一职责原则:应该有且仅有一个原因引起类的变更。

里氏替换原则:子类必须能够替换父类,子类行为可以扩展但不能破坏父类行为,子类可以增加自己的特有方法,遵循父类的约束。

依赖倒置原则:“面向接口编程”。依赖于抽象而不依赖于具体。

迪米特法则(LoD)也叫最少知道法则:一个对象应该对其他对象有最少的了解。

合成复用原则(Composite Reuse Principle)尽量使用对象组合/聚合,而不是继承关系达到软件复用的目的。