目录
在大话设计模式第29章OOTV杯超级模式大赛中,对23种设计模式进行了分类,下面我们对这些模式进行总结。
总体来说23种设计模式分为三大类:
一、创建型设计模式
创建型设计模式是软件设计模式中的一种类型,用于解决对象的创建过程中的一些常见问题。本文将介绍常用的四种创建型设计模式。
1. 简单工厂模式
简单工厂模式属于创建型的设计模式,它提供了一种用于创建对象的最简单的方法,通过一个简单的工厂类来创建所需要的对象。在此模式中,客户端只需要知道所需产品的名称即可,而不需要知道具体的产品实现细节。
1.1 使用场景
当需要对对象的创建过程进行封装时,可以考虑使用简单工厂模式。此外,在需要根据输入参数的不同来动态创建不同的对象时也可以使用简单工厂模式。
1.2 实现方式
简单工厂模式的实现方式是定义一个工厂类,该工厂类负责创建各种类型的产品对象。客户端只需要通过工厂类来获取其所需的产品对象即可。
2. 工厂方法模式
工厂方法模式是一种常用的创建型设计模式,它通过定义一个工厂接口来创建产品,并让子类来决定具体实例化哪个类。这样,在增加新产品时只需要添加新的工厂类即可,而不需要修改现有的代码。
2.1 使用场景
当需要增加新的产品时,可以考虑使用工厂方法模式。此外,在需要动态切换产品等级结构时也可以使用该模式。
2.2 实现方式
工厂方法模式的实现方式是定义一个抽象的工厂接口,具体的产品由其子类来实现。工厂接口中通常会定义一个方法用于创建产品对象,而工厂子类则根据需要实现该方法以创建所需的具体产品对象。
3. 抽象工厂模式
抽象工厂模式是一种常用的创建型设计模式,它提供了一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
3.1 使用场景
当需要创建一组相关或依赖的对象时,可以考虑使用抽象工厂模式。此外,在需要提供一组相互依赖的对象以供选择时也可以使用该模式。
3.2 实现方式
抽象工厂模式的实现方式是定义一个抽象的工厂接口,该接口用于创建许多对象的家族。每个具体的工厂子类负责创建家族中的一组具体产品。
4. 建造者模式
建造者模式是一种创建型的设计模式,它将复杂对象的创建过程进行分解,在分步进行过程中使得创建过程更加简单,同时也更加灵活。建造者模式通过将复杂对象的创建过程分解成若干单独的步骤来实现其功能。
4.1 使用场景
当需要创建复杂对象时,可以考虑使用建造者模式。例如,在需要创建具有许多不同属性的对象时,可以使用该模式来将其创建过程进行分解并逐步构建。
4.2 实现方式
建造者模式的实现方式是定义一个抽象的建造者接口,该接口用于定义对象的各个部分的构建方法。每个具体的建造者实现类负责实现一个或多个部分的构建方法,从而最终构建出完整的对象。
结语
创建型设计模式是常用的一种设计模式,通过使用这些模式,可以更好地管理、封装和组织对象的创建过程,从而提高代码复用性和可维护性。在实际的开发中,根据具体的需求进行选择不同的模式进行使用,可以更好地实现软件系统的设计和开发。
二、结构型模式(7种):
结构型设计模式是软件设计模式中的一种类型,用于解决对象之间的组合和接口设计问题。本文将介绍常用的四种结构型设计模式。
1. 适配器模式
适配器模式是一种常用的结构型设计模式,它允许将一个类的接口转换成客户端所期望的另一个接口。适配器模式主要用于解决原有代码与新代码之间的兼容性问题,使得原有的类能够与新的接口进行协同工作。
1.1 使用场景
当需要将一个类的接口转换成另一个接口时,可以考虑使用适配器模式。此外,在需要复用已有类但其接口与需求不匹配时也可以使用该模式。
1.2 实现方式
适配器模式的实现方式是定义一个适配器类,该类实现客户端所期望的目标接口,并在内部持有一个被适配类的实例。适配器类通过调用被适配类的方法来实现目标接口的方法。
2. 桥接模式
桥接模式是一种常用的结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立变化。桥接模式通过提供一个桥接接口,将抽象部分和实现部分连接起来,从而达到解耦的目的。
2.1 使用场景
当需要将抽象部分与实现部分分离,使它们可以独立变化时,可以考虑使用桥接模式。此外,在需要通过多个维度进行组合时也可以使用该模式。
2.2 实现方式
桥接模式的实现方式是定义一个桥接接口,该接口作为抽象部分与实现部分之间的桥梁。具体的实现类则实现桥接接口,并在内部持有一个实现部分的引用。
3. 组合模式
组合模式是一种常用的结构型设计模式,它允许将对象组合成树形结构来表示"部分-整体"的层次结构。组合模式主要用于处理树形结构数据,统一对待单个对象和组合对象。
3.1 使用场景
当需要处理树形结构数据,并且希望能够一致地对待单个对象和组合对象时,可以考虑使用组合模式。此外,在需要对树形结构进行递归操作时也可以使用该模式。
3.2 实现方式
组合模式的实现方式是定义一个抽象的组件接口,该接口声明了对于组合对象和叶子对象的共同操作。组合对象和叶子对象分别实现该接口,组合对象内部持有一个组件列表,用于存储子组件。
4. 装饰者模式
装饰者模式是一种常用的结构型设计模式,它允许在不改变原有对象的情况下,动态地扩展其功能。装饰者模式通过定义一个装饰者类,将待装饰的对象传入装饰者类中,并在装饰者类中添加额外的功能。
4.1 使用场景
当需要在不改变原有对象的情况下,动态地扩展其功能时,可以考虑使用装饰者模式。此外,在需要对对象的功能进行多层包装时也可以使用该模式。
4.2 实现方式
装饰者模式的实现方式是定义一个抽象的装饰者类,该类实现了待装饰对象的接口,并持有一个被装饰对象的引用。具体的装饰者子类通过调用被装饰对象的方法,并添加额外的功能来实现装饰效果。
结语
结构型设计模式提供了一些常见的解决方案,用于处理对象之间的组合和接口设计问题。通过选择合适的结构型设计模式,可以使代码更易于扩展、维护和重用,提高软件系统的灵活性和可扩展性。在实际的开发中,根据具体的需求和问题选择合适的结构型设计模式进行使用,有助于实现高质量的软件设计和开发。
行为型模式(11种):
1、策略模式: 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。
2、模板方法模式:定义一个操作的算法骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
3、观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。
4、迭代器模式:提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。
5、责任链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
6、命令模式:将一个请求封装为一个对象,从而是你可用不用的请求对客户进行参数化;可以对请求排队或记录请求日志,以及支持可撤销的操作。
7、备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
8、状态模式:允许一个对象在其内部状态改变时改变它的行为,让对象看起来似乎修改了它的类。
9、访问者模式:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的前提下定义作用于这些元素的新操作。
10、中介者模式:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
11、解释器模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
(行为模式又分为行为类模式和行为对象模式,行为类模式采用继承机制在类间分配行为,其中模板方法模式和解释器模式就属于行为类模式;行为对象模式使用对象组合而非继承,描述了一组相互对等的对象如何相互协作来完成任何一个单一对象都无法完成的任务,剩下的9中行为模式都属于组合行为模式范畴)