设计模式——模板方法模式

简介: 设计模式——模板方法模式

设计模式——模板方法模式

概念

①、什么是模板模式?

定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模块方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
简单来说:模块方法模式是通过把不变行为搬移到超类,去除子类的重复代码来体现它的优势。

②、主要解决什么问题

一些通用的方法,却在每一个子类都重写了这一类方法

③、如何解决?

将这些通用算法抽象出来

④、优缺点

优点:

  1. 提供了一个分号的代码复用平台
  2. 帮助子类拜托重复的不变行为的纠缠
  3. 封装不变部分,扩展可变部分
    缺点:
    每一个不同的实现都需要一个子类来实现,导致类的个数增加,使系统更加庞大
    ⑤、 什么时候使用
    当不变的和可变的行为在方法的子类实现中混合在一起的时候,(不变的行为就会在子类中重复出现)


AbstractClass:是抽象类,其实也就是一个抽象模板,定义并实现了一个模板方法。这个模板方法一一般是一个具体方法,它给出了一个顶级逻辑的骨架,二逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。

ConcreteClass:实现父类所定义的一个或多个抽象方法,每一个AbstractClass都可以有任意多个ConcreteClass与之对应而每一个ConcreteClass都可以各处这些抽象方法的不同实现。

代码

AbstractClass类

abstract  class AbstractClass
{
        public abstract void PrimitiveOperation1();
        public abstract void PrimitiveOperation2();//抽象方法放到子类中实现
        public void TemplateMethod()                //模板方法,给出了逻辑的骨架而逻辑的组成是一些相应的抽象操作,他们都推迟到子类实现
        {
            PrimitiveOperation1();
            PrimitiveOperation2();
            Console.WriteLine("");
        }
    }

ConcreteClass(A B)类

class ConcreteClassA:AbstractClass 
    {
        public override void PrimitiveOperation1()  //与ConcreteClassB方法不同实现
        {
            Console.WriteLine("具体类A方法1实现");
        }
        public override void PrimitiveOperation2()
        {
            Console.WriteLine("具体类A方法2实现");
        }
    }
class ConcreteClassB:AbstractClass 
    {
        public override void PrimitiveOperation1()//与ConcreteClassA不同的方法实现
        {
            Console.WriteLine("具体类B方法1实现");
        }
        public override void PrimitiveOperation2()
        {
            Console.WriteLine("具体类B方法2实现");
        }
    }

客户端代码

class Program
    {
        static void Main(string[] args)
        {
            AbstractClass c;
            c = new ConcreteClassA();
            c.TemplateMethod();
            c = new ConcreteClassB();
            c.TemplateMethod();
            Console.Read();
        }
    }
目录
相关文章
|
7月前
|
设计模式 算法
二十三种设计模式全面解析-深入解析模板方法模式的奇妙世界
二十三种设计模式全面解析-深入解析模板方法模式的奇妙世界
|
设计模式 存储 算法
行为型设计模式02-模板方法模式
行为型设计模式02-模板方法模式
53 0
|
设计模式 算法
设计模式9 - 模板方法模式【Template Method Pattern】
设计模式9 - 模板方法模式【Template Method Pattern】
41 0
|
设计模式 算法 Java
设计模式~模板方法模式(Template method)-10
目录 (1)优点: (2)缺点: (3)使用场景: (4)注意事项: (5)应用实例: (6)Servlet Api &
59 0
|
3月前
|
设计模式 算法 Java
Java设计模式-模板方法模式(14)
Java设计模式-模板方法模式(14)
|
5月前
|
设计模式 JavaScript 算法
js设计模式【详解】—— 模板方法模式
js设计模式【详解】—— 模板方法模式
48 6
|
6月前
|
设计模式 算法 关系型数据库
设计模式第七讲-外观模式、适配器模式、模板方法模式详解
系统要求所有的数据库帮助类必须实现ISqlHelp接口,面向该接口编程,如SQLServerHelp类。 此时第三方提供了一个新的MySql的帮助类(假设是dll,不能修改),它的编程规范和ISqlHelp不兼容,这个时候就需要引入适配器类,使二者能相互兼容。
176 0
|
7月前
|
设计模式 算法 Java
Java 设计模式:深入模板方法模式的原理与应用
【4月更文挑战第27天】模板方法模式是一种行为设计模式,主要用于定义一个操作中的算法的框架,允许子类在不改变算法结构的情况下重定义算法的某些特定步骤。
67 1
|
7月前
|
设计模式 Go
[设计模式 Go实现] 行为型~模板方法模式
[设计模式 Go实现] 行为型~模板方法模式
|
7月前
|
设计模式 算法 Java
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式