温州购物网络商城网站设计制作,开发网站的语言,天猫网站设计分析,wordpress主题邮件模板下载失败程序设计中的主要设计模式通常分为三大类#xff0c;共23种#xff1a;
1. 创建型模式#xff08;Creational Patterns#xff09; 单例模式#xff08;Singleton#xff09;#xff1a;确保一个类只有一个实例#xff0c;并提供全局访问点。 工厂方法模式#xff0…程序设计中的主要设计模式通常分为三大类共23种
1. 创建型模式Creational Patterns 单例模式Singleton确保一个类只有一个实例并提供全局访问点。 工厂方法模式Factory Method定义创建对象的接口由子类决定实例化哪个类。 抽象工厂模式Abstract Factory提供一个创建一系列相关或依赖对象的接口而无需指定具体类。 建造者模式Builder将一个复杂对象的构建与其表示分离使同样的构建过程可以创建不同的表示。 原型模式Prototype通过复制现有对象来创建新对象。
2. 结构型模式Structural Patterns 适配器模式Adapter将一个类的接口转换成客户希望的另一个接口。 桥接模式Bridge将抽象部分与实现部分分离使它们可以独立变化。 组合模式Composite将对象组合成树形结构以表示“部分-整体”的层次结构。 装饰器模式Decorator动态地给对象添加职责相比生成子类更为灵活。 外观模式Facade为子系统中的一组接口提供一个统一的接口。 享元模式Flyweight通过共享技术有效地支持大量细粒度对象。 代理模式Proxy为其他对象提供一种代理以控制对这个对象的访问。
3. 行为型模式Behavioral Patterns 责任链模式Chain of Responsibility使多个对象都有机会处理请求从而避免请求的发送者与接收者耦合。 命令模式Command将请求封装为对象使你可以用不同的请求对客户进行参数化。 解释器模式Interpreter给定一个语言定义其文法的一种表示并定义一个解释器。 迭代器模式Iterator提供一种方法顺序访问一个聚合对象中的各个元素而又不暴露其内部表示。 中介者模式Mediator定义一个中介对象来封装一系列对象之间的交互。 备忘录模式Memento在不破坏封装性的前提下捕获一个对象的内部状态并在该对象之外保存这个状态。 观察者模式Observer定义对象间的一对多依赖关系当一个对象改变状态时所有依赖者都会收到通知并自动更新。 状态模式State允许对象在其内部状态改变时改变其行为。 策略模式Strategy定义一系列算法将它们封装起来并使它们可以互相替换。 模板方法模式Template Method定义一个操作中的算法骨架将一些步骤延迟到子类中。 访问者模式Visitor表示一个作用于某对象结构中的各元素的操作使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。
4.模板方法模式Template Method Pattern解释
模板方法模式是一种行为设计模式它定义了一个算法的框架并允许子类在不改变算法结构的情况下重新定义算法的某些步骤。模板方法模式的核心思想是将算法的通用部分放在父类中而将可变的部分留给子类去实现。
模板方法模式的主要组成部分包括
抽象类Abstract Class定义了一个模板方法该方法包含了算法的骨架。模板方法通常会调用一些抽象方法或钩子方法这些方法由子类实现。具体类Concrete Class实现了抽象类中的抽象方法或钩子方法从而具体化了算法的某些步骤。
模板方法模式的关键在于父类控制算法的流程子类实现具体的步骤。这种方式可以避免代码重复并且使得算法的扩展更加灵活。 5.C# 实现模板方法模式的演示代码 csharp
using System;// 抽象类定义模板方法和算法的骨架
public abstract class AbstractClass
{// 模板方法定义了算法的流程public void TemplateMethod(){Step1();Step2();Step3();HookMethod(); // 钩子方法子类可以选择是否重写}// 具体步骤1抽象方法子类必须实现protected abstract void Step1();// 具体步骤2抽象方法子类必须实现protected abstract void Step2();// 具体步骤3默认实现子类可以选择是否重写protected virtual void Step3(){Console.WriteLine(AbstractClass: Default implementation of Step3);}// 钩子方法默认实现子类可以选择是否重写protected virtual void HookMethod(){Console.WriteLine(AbstractClass: Default implementation of HookMethod);}
}// 具体类A实现抽象类中的抽象方法
public class ConcreteClassA : AbstractClass
{protected override void Step1(){Console.WriteLine(ConcreteClassA: Step1);}protected override void Step2(){Console.WriteLine(ConcreteClassA: Step2);}// 重写Step3提供自定义实现protected override void Step3(){Console.WriteLine(ConcreteClassA: Custom implementation of Step3);}// 重写钩子方法提供自定义实现protected override void HookMethod(){Console.WriteLine(ConcreteClassA: Custom implementation of HookMethod);}
}// 具体类B实现抽象类中的抽象方法
public class ConcreteClassB : AbstractClass
{protected override void Step1(){Console.WriteLine(ConcreteClassB: Step1);}protected override void Step2(){Console.WriteLine(ConcreteClassB: Step2);}// 不重写Step3使用默认实现// 不重写HookMethod使用默认实现
}// 客户端代码
class Program
{static void Main(string[] args){Console.WriteLine(Client: Testing ConcreteClassA);AbstractClass classA new ConcreteClassA();classA.TemplateMethod();Console.WriteLine(\nClient: Testing ConcreteClassB);AbstractClass classB new ConcreteClassB();classB.TemplateMethod();}
} 6.代码说明 抽象类AbstractClass 定义了模板方法 TemplateMethod它包含了算法的骨架。包含两个抽象方法 Step1 和 Step2子类必须实现。包含一个默认实现的方法 Step3子类可以选择是否重写。包含一个钩子方法 HookMethod子类可以选择是否重写。 具体类AConcreteClassA 实现了抽象方法 Step1 和 Step2。重写了 Step3 和 HookMethod提供了自定义实现。 具体类BConcreteClassB 实现了抽象方法 Step1 和 Step2。没有重写 Step3 和 HookMethod使用默认实现。 客户端代码 创建了 ConcreteClassA 和 ConcreteClassB 的实例并调用它们的 TemplateMethod展示了不同子类的行为。 7.运行结果
Client: Testing ConcreteClassA
ConcreteClassA: Step1
ConcreteClassA: Step2
ConcreteClassA: Custom implementation of Step3
ConcreteClassA: Custom implementation of HookMethodClient: Testing ConcreteClassB
ConcreteClassB: Step1
ConcreteClassB: Step2
AbstractClass: Default implementation of Step3
AbstractClass: Default implementation of HookMethod 8.总结
模板方法模式通过将算法的框架放在父类中而将具体步骤的实现交给子类实现了代码的复用和扩展性。它的主要优点包括
代码复用算法的通用部分在父类中实现避免了代码重复。扩展性子类可以灵活地实现或重写某些步骤而不需要修改算法的整体结构。控制流程父类控制算法的流程子类只需关注具体的实现细节。
模板方法模式常用于框架设计、算法实现等场景例如在开发库或框架时可以为用户提供一个可扩展的算法模板。