首页 > 其他分享 >设计模式之 Template Method模版方法

设计模式之 Template Method模版方法

时间:2023-10-08 14:46:29浏览次数:29  
标签:int 子类 public DynamicCal Template res 设计模式 重写 Method

Template Method模式提供了不重写方法的前提下,允许子类重载部分方法的方法;

在操作中定义算法的框架,将一些步骤由子类实现,该模式可以再不修改算法结构的情况下,让子类重新定义算法的特定步骤;

优点:

代码重用的基础技术;

适用:

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

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

 

示例代码C#:

/// <summary>
    /// 基类(抽象类,允许子类重写可变部分)
    /// </summary>
    public abstract class BaseSquare
    {
        /// <summary>
        /// 求平方,不变部分
        /// </summary>
        /// <param name="x"></param>
        /// <returns></returns>
        public int Square(int x)
        {
            return x * x;
        }
        /// <summary>
        /// 求和或求差,是可变部分(在子类中重写)
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <returns></returns>
        public  abstract int DynamicCal(int x, int y);
        /// <summary>
        /// 计算最终结果
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <returns></returns>
        public int GetResult(int x, int y)
        {
            int temp = DynamicCal(x,y);
            return Square(temp);
        }
    }
    /// <summary>
    /// 平方和
    /// </summary>
    public class SumSquare : BaseSquare
    {
        /// <summary>
        /// 将可变部分重写
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <returns></returns>
        public override int DynamicCal(int x, int y)
        {
            return x+y;
        }
    }
    /// <summary>
    /// 平方差
    /// </summary>
    public class SubSquare : BaseSquare
    {
        /// <summary>
        /// 将可变部分重写
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <returns></returns>
        public override int DynamicCal(int x, int y)
        {
           return x-y;
        }
    }
    
class Program
    {
        static void Main(string[] args)
        {


            TemplateMethodTest();


            Console.ReadLine();
        }

        public static void TemplateMethodTest()
        {
            int a = 2, b = 4, res;
            res = new SumSquare().GetResult(a, b);
            Console.WriteLine($"{a},{b}的平方和是{res}");
            res = new SubSquare().GetResult(a, b);
            Console.WriteLine($"{a},{b}的平方差是{res}");
        }


    }

 

标签:int,子类,public,DynamicCal,Template,res,设计模式,重写,Method
From: https://www.cnblogs.com/zhangdezhang/p/17749014.html

相关文章

  • 设计模式(七)桥接
    一、定义将抽象部分与它的实现部分解耦,使两者都能够独立变化,桥接模式是一种结构型模式。二、描述包含以下四个角色:1、Abstraction(抽象类):它是用于定义抽象类的接口,通常是抽象类而不是接口,其中定义了一个Implementor(实现类接口)类型的对象并可以维护该对象,它与Implementor之间具......
  • Java设计模式之策略模式
    1.1 概述先看下面的图片,我们去旅游选择出行模式有很多种,可以骑自行车、可以坐汽车、可以坐火车、可以坐飞机 作为一个程序猿,开发需要选择一款开发工具,当然可以进行代码开发的工具有很多,可以选择Idea进行开发,也可以使用eclipse进行开发,也可以使用其他的一些开发工具。定......
  • 设计模式
    1.观察者模式 观察者模式(Observer)又称发布-订阅模式(Publish-Subscribe:Pub/Sub)。它是一种通知机制,让发送通知的一方(被观察方)和接收通知的一方(观察者)能彼此分离,互不影响。消息系统中,同步消息依次通知各个观察者,异步通知可以同时使所有观察者同时操作。2.迭代器模式迭代器模式(It......
  • [SpringCloud 01] RestTemplate Ribbon Feign
    SpringCloud11.RestTemplatespringcloud是基于rest的框架,所以在调用其他服务的时候,可以支持用restTemplate来调用.可以在spring中首先用@Bean的方式把ResTemplate放入spring容器@ConfigurationpublicclassMyConfig{@BeanpublicRestTemplategetRestTem......
  • 23种设计模式的图示总结概述(创建型模式和结构型模式)
    1、创建型模式1、简单工厂模式根据不同的需求(条件),创建出来不同的对象;2、工厂方法模式简单地说,就是不同的工厂分别制作不同的产品,这样能够避免上面的工厂出问题,全体待工的情况;3、抽象工厂模式出现新的概念——产品等级结构、产品族;不同的产品有不同的抽象产品,不同的工厂......
  • php 设计模式
    1.单例模式 单例模式顾名思义,就是只有一个实例。作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 单例模式的要点有三个:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。......
  • 【愚公系列】2023年10月 二十三种设计模式(五)-单例模式(Singleton Pattern)
    ......
  • 前端设计模式:工厂模式(Factory)
    00、基础概念......
  • 设计模式之工厂模式
    工厂模式是一种创建型设计模式,它提供了一个用于创建对象的接口,但允许子类决定实例化哪个类。工厂方法让一个类的实例化延迟到其子类。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在软件开发中,对象的创建和使用是常见的操作。然而,对象的创建过程常常会涉及......
  • c#设计模式-行为型模式 之 模板方法模式
    ......