23种设计模式之模板方法(Template Method)

简介: 23种设计模式之模板方法(Template Method)模板方法模式是一种类的行为型模式,用于定义一个操作中算法的骨架,而将一些步骤延迟到子类中。

23种设计模式之模板方法(Template Method)

模板方法模式是一种类的行为型模式,用于定义一个操作中算法的骨架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤,其缺点是对于不同的实现,都需要定义一个子类,这会导致类得个数增加,但是更加符合类职责的分配原则,使得类得内聚性得以提高。

优点:代码重用的基础技术

使用场景:

1)想要一次实现算法的不变部分,而使用子类实现算法的可变行为。

2)当子类间的通用行为需要分解、定位到通用类的时候,这样可以避免代码重复的问题。

Template Method

 

public abstract class Document { /// <summary> /// 存储文档数据 /// </summary> public void Save() { Console.WriteLine("存储文档数据"); } /// <summary> /// 打开文档 /// </summary> /// <param name="docName"></param> public void Open(string docName) { Console.WriteLine("打开文档"); } /// <summary> /// 关闭文档 /// </summary> public void Close() { Console.WriteLine("关闭文档"); } public abstract void Read(string docName);//抽象方法读取文档 }

 

public abstract class Application { private IList<Document> docs = new List<Document>();//文档对象列表 /// <summary> /// 判断是否可以打开指定文档 /// </summary> /// <param name="docName"></param> /// <returns>返回true时表示可以打开;返回false时表示不可打开</returns> public bool CanOpenDocument(string docName) { bool flag = true; // return flag; } public void AddDocument(Document aDocument) { docs.Add(aDocument);//将文档对象添加到文档对象集合当中 Console.WriteLine("加入了aDocument对象"); } public abstract Document DoCreateDocument();//抽象方法 创建一个文档对象 /// <summary> /// 打开指定文档 /// </summary> /// <param name="docName">文档路径</param> public void OpenDocument(string docName) { if (!CanOpenDocument(docName)) { Console.WriteLine("文档无法打开!"); return; } Document adoc = DoCreateDocument(); adoc.Open(docName); adoc.Read(docName); AddDocument(adoc); } }

目录
相关文章
|
4月前
|
设计模式 算法 Java
模板方法--设计模式
模板方法--设计模式
38 0
|
4月前
|
设计模式 算法 Java
Java一分钟之-设计模式:策略模式与模板方法
【5月更文挑战第17天】本文介绍了策略模式和模板方法模式,两种行为设计模式用于处理算法变化和代码复用。策略模式封装不同算法,允许客户独立于具体策略进行选择,但需注意选择复杂度和过度设计。模板方法模式定义算法骨架,延迟部分步骤给子类实现,但过度抽象或滥用继承可能导致问题。代码示例展示了两种模式的应用。根据场景选择合适模式,以保持代码清晰和可维护。
67 1
|
4月前
|
设计模式 Java 容器
【设计模式】JAVA Design Patterns——Async Method Invocation(异步方法调用模式)
【设计模式】JAVA Design Patterns——Async Method Invocation(异步方法调用模式)
|
3月前
|
设计模式 算法
模板方法-大话设计模式
模板方法-大话设计模式
|
4月前
|
设计模式 安全 Java
【设计模式】JAVA Design Patterns——Curiously Recurring Template Pattern(奇异递归模板模式)
该文介绍了一种C++的编程技巧——奇异递归模板模式(CRTP),旨在让派生组件能继承基本组件的特定功能。通过示例展示了如何创建一个`Fighter`接口和`MmaFighter`类,其中`MmaFighter`及其子类如`MmaBantamweightFighter`和`MmaHeavyweightFighter`强制类型安全,确保相同重量级的拳手之间才能进行比赛。这种设计避免了不同重量级拳手间的错误匹配,编译时会报错。CRTP适用于处理类型冲突、参数化类方法和限制方法只对相同类型实例生效的情况。
【设计模式】JAVA Design Patterns——Curiously Recurring Template Pattern(奇异递归模板模式)
|
3月前
|
设计模式 存储 Java
JavaSE——面向对象高级二(2/4)-final关键字、常量、抽象类(认识抽象类、抽象类的好处、应用场景-模板方法设计模式)
JavaSE——面向对象高级二(2/4)-final关键字、常量、抽象类(认识抽象类、抽象类的好处、应用场景-模板方法设计模式)
22 0
|
4月前
|
设计模式
设计模式(二)工厂方法模式(Factory Method)
设计模式(二)工厂方法模式(Factory Method)
25 0
|
4月前
|
设计模式 算法 Java
【设计模式】springboot3项目整合模板方法深入理解设计模式之模板方法(Template Method)
【设计模式】springboot3项目整合模板方法深入理解设计模式之模板方法(Template Method)
|
1天前
|
设计模式 算法 安全
设计模式——模板模式
模板方法模式、钩子方法、Spring源码AbstractApplicationContext类用到的模板方法
设计模式——模板模式
|
27天前
|
设计模式
设计模式-单一职责模式
设计模式-单一职责模式