共计 1954 个字符,预计需要花费 5 分钟才能阅读完成。
学习 GoF 设计模式以解决软件设计中的问题
“不思考变动的设计可能会在将来面临重大的从新设计危险。”:埃里希伽玛
在面向对象设计中,模式是常见问题的一种典型解决方案。当一个解决方案在各种我的项目中一次又一次地呈现时,最终会有人为其命名并详细描述它。这就是发现模式的形式。
模式就像预制的蓝图,咱们能够对其进行自定义以解决代码中重复呈现的问题。模式不是一段特定的代码,而是解决特定问题的个别思路或者概念。咱们能够遵循模式详细信息,并施行适宜程序的解决方案。
1995 年,Erich Gamma、John Vlissides、Ralph Johnson 和 Richard Helm 出版了《Design Patterns: Elements of Reusable Object-Oriented Software》一书 (中文:设计模式:可复用面向对象软件设计),他们将设计模式利用于编程。因为名字太长,它被称为 GOF 书或四人帮的书。
为什么要学习这些设计模式
设计模式是针对常见软件设计问题的一组久经考验的解决方案。即便从未遇到过这些问题,学习设计模式依然很有价值,因为它教会咱们如何应用面向对象设计的准则解决各种问题。
通过提供模式术语,设计模式还能够促成团队成员之间的沟通。
设计模式的分类
设计模式分为三大类:
创立模式:提供对象创立机制,减少了现有代码的灵活性和重用性。
构造模式:解释了如何将对象和类组装成更大的构造,同时放弃构造的灵活性和效率。
行为模式:负责对象之间的无效沟通和职责调配。
创立设计模式
创立模式提供了各种对象创立机制,减少了现有代码的灵活性和重用性。
GoF 设计模式中定义了 5 种创立设计模式:
单例:单例是一种创立设计模式,它确保一个类只有一个实例,并为这个实例提供一个全局拜访点。
工厂:工厂办法是一种创立型设计模式,它提供了在超类中创建对象的接口,同时容许子类更改创立的对象类型。
形象工厂:形象工厂是一种创立设计模式,它容许生成相干对象的类,而无需指定它们的具体类。
构建器:构建器是一种创立设计模式,可逐渐构建简单的对象。能够应用雷同的结构代码创建对象的不同类型和示意。
原型:原型是一种创立设计模式,它容许您复制现有对象,而不会使您的代码依赖于它们的类。
构造设计模式
构造设计模式解释了如何将对象和类组装成更大的构造,同时放弃它们的灵活性和效率。
GoF 设计模式中定义了 7 种构造设计模式:
适配器:适配器是一种构造设计模式,它容许具备不兼容接口的对象进行通信。
复合:复合是一种构造设计模式,它容许您将对象组合成树结构,而后像解决单个对象一样应用这些构造。
代理:代理是一种构造设计模式,容许提供占位符或代替另一个对象。应用代理,能够管制对原始对象的拜访,容许在申请被传递到原始对象之前或之后执行某些操作。
享元:应用享元,能够通过在多个对象之间共享状态的公共局部而不是将所有数据保留在每个对象中,将更多对象放入 RAM。
外观:外观是一种设计模式,它为库、框架或任何其余类集提供简化的接口。
桥接:容许将一个大类或一组密切相关的类拆分为两个独立的层次结构:形象和实现,以独立开发。
装璜器:应用装璜器设计模式,能够通过将新行为搁置在蕴含新行为的非凡包装对象中来将新行为附加到对象。
行为设计模式
行为模式波及算法和对象之间的职责调配。
GoF 设计模式中定义了 11 种行为设计模式:
模板办法:模板办法在超类中定义了算法的骨架,容许子类在不批改其构造的状况下笼罩特定步骤。
中介者:应用中介者,能够缩小对象之间的凌乱依赖。该模式限度了对象之间的间接通信,并迫使它们仅通过中介进行合作。
责任链:责任 链容许您沿着处理程序链传递申请。收到申请后,每个处理程序决定是解决申请还是将其传递给链中的下一个处理程序。
观察者:观察者模式容许你定义一种机制来告诉多个对象他们正在察看的对象产生的事件。
策略:应用策略,能够定义一系列算法,将它们放入不同的类,并使它们的对象可调换。
命令:命令是一种行为设计模式,它将申请转换为蕴含无关它们的所有信息的独立对象。通过这种转换,您能够应用各种申请参数化办法,提早或排队申请的执行,并反对可吊销的操作。
状态:作为一种行为设计模式,状态容许对象在其外部状态发生变化时扭转其行为。看起来如同对象扭转了它的类。
访问者:应用访问者模式,您能够将算法与它们操作的对象离开。
解释器:解释器是一种行为设计模式,它定义了一种语言的语法示意,并提供了一个解释器来解决这种语法。
迭代器:一种称为迭代器的行为设计模式容许您遍历汇合的元素而不裸露它们的底层示意。
备忘录:备忘录模式容许保留和复原对象的先前状态,而无需走漏其实现细节。
以上是 23 种模式的简介,在接下来一个月的文章中,咱们一起来具体学习这些设计模式。