当前位置: 首页 > 科技观察

学习GoF设计模式来解决软件设计中的问题

时间:2023-03-20 22:03:05 科技观察

“不考虑变化的设计可能在未来面临重大重新设计的风险。”:ErichGamma在面向对象设计中,模式是常见问题之一A典型的解决方案。当一个解决方案在各种项目中一次又一次出现时,最终会有人给它起个名字并详细描述。这就是发现模式的方式。模式就像预制的蓝图,我们可以自定义它来解决代码中反复出现的问题。模式不是特定的一段代码,而是解决特定问题的一般思想或概念。我们可以遵循模式细节并实施适合程序的解决方案。1995年,ErichGamma、JohnVlissides、RalphJohnson和RichardHelm出版了《Design Patterns: Elements of Reusable Object-Oriented Software》(中文:DesignPatterns:ReusableObject-OrientedSoftwareDesign)一书,将设计模式应用到编程中。由于名字很长,它被称为GOF书或四人帮书。为什么要学习这些设计模式设计模式是针对常见软件设计问题的一组久经考验的真实解决方案。即使你从未遇到过这些问题,学习设计模式仍然很有价值,因为它教会我们如何使用面向对象设计的原则来解决各种问题。设计模式还通过提供模式术语来促进团队成员之间的交流。设计模式的分类设计模式分为三类:创建型模式:提供对象创建机制,增加现有代码的灵活性和重用性。结构模式:解释如何将对象和类组装成更大的结构,同时保持结构的灵活性和效率。行为模式:负责对象之间的有效沟通和职责分配。创建设计模式创建模式提供了多种对象创建机制,可提高现有代码的灵活性和重用性。GoFDesignPatterns中定义了5种创建设计模式:Singleton:Singleton是一种创建设计模式,确保一个类只有一个实例,并为这个实例提供全局访问点。工厂:工厂方法是一种创建型设计模式,它为在超类中创建对象提供接口,同时允许子类更改所创建对象的类型。抽象工厂:抽象工厂是一种创建型设计模式,允许在不指定具体类的情况下生成相关对象的类。构建器:构建器是一种创造性的设计模式,可以逐步构建复杂的对象。可以使用相同的构造代码创建不同类型和表示的对象。原型:原型是一种创建型设计模式,它允许您复制现有对象而不使您的代码依赖于它们的类。结构设计模式结构设计模式解释了如何将对象和类组装成更大的结构,同时保持它们的灵活性和效率。GoFDesignPatterns中定义了7种结构设计模式:Adapter:Adapter是一种结构设计模式,允许具有不兼容接口的对象进行通信。Composite:Composite是一种结构设计模式,允许您将对象组合成树结构,然后像处理单个对象一样使用这些结构。代理:代理是一种结构设计模式,允许提供占位符或替代另一个对象。使用代理,您可以控制对原始对象的访问,允许在将请求传递给原始对象之前或之后执行某些操作。享元:使用享元,您可以通过在多个对象之间共享状态的公共部分而不是将所有数据保存在每个对象中,从而将更多对象放入RAM。Facade:Facade是一种设计模式,它为库、框架或任何其他类集合提供简化的接口。桥接:允许将一个大类或一组密切相关的类拆分为两个独立的层次结构:抽象和实现,以便独立开发。装饰器:使用装饰器设计模式,通过将新行为放置在包含新行为的特殊包装对象中,可以将新行为附加到对象。行为设计模式行为模式涉及算法和对象之间的职责分配。GoF设计模式中定义了11种行为设计模式:模板方法:模板方法在超类中定义算法的骨架,允许子类在不修改其结构的情况下覆盖特定步骤。调解器:使用调解器,您可以减少对象之间令人困惑的依赖关系。这种模式限制了对象之间的直接通信,并迫使它们只能通过中介进行合作。责任链:责任链允许您沿着处理程序链传递请求。收到请求后,每个处理程序决定是处理请求还是将其传递给链中的下一个处理程序。Observer:观察者模式允许您定义一种机制来通知多个对象他们正在观察的对象上发生的事件。Strategies:使用Strategies,您可以定义一系列算法,将它们放入不同的类中,并使它们的对象可以互换。Command:Command是一种行为设计模式,它将请求转换为包含有关它们的所有信息的自包含对象。通过这种转换,您可以使用各种请求参数化方法,延迟或排队请求的执行,并支持可撤销操作。State:作为一种行为设计模式,状态允许对象在其内部状态发生变化时改变其行为。看起来好像对象改变了它的类。Visitor:使用Visitor模式,您可以将算法与其操作的对象分开。Interpreter:解释器是一种行为设计模式,它定义了一种语言的语法表示,并提供了一个解释器来处理该语法。迭代器:一种称为迭代器的行为设计模式允许您迭代集合的元素而不暴露其底层表示。备忘录:备忘录模式允许保存和恢复对象的先前状态,而无需透露其实现细节。以上就是对23种形态的简单介绍。在下个月的文章中,让我们详细学习这些设计模式。