首页 > 其他分享 >15_模板模式

15_模板模式

时间:2024-03-12 11:14:12浏览次数:24  
标签:15 子类 void 模式 算法 抽象类 public 模板

模板模式是一种行为型设计模式,它定义了一个抽象类作为算法的骨架,而将一些步骤的具体实现延迟到子类中。模板模式提供了一个统一的算法流程,但允许子类根据需要重写算法的具体步骤。

模板模式有三个主要角色:

  1. 抽象类(Abstract Class):定义了算法的骨架,包含了一个模板方法以及一些抽象方法或钩子方法。模板方法定义了算法的流程,而抽象方法或钩子方法则由子类实现具体的步骤。

  2. 具体类(Concrete Class):继承自抽象类,并实现了抽象方法或钩子方法,完成具体的步骤。

  3. 客户端(Client):使用模板方法来调用算法,无需关心具体步骤的实现。

模板模式的工作原理如下:

  1. 抽象类定义了一个模板方法,该方法定义了算法的流程,包含了一系列的步骤调用。

  2. 抽象类中的步骤可以是抽象方法或钩子方法,由子类来实现具体的步骤。

  3. 客户端通过调用抽象类的模板方法来执行算法,具体步骤的实现由子类决定。

模板模式的优点包括:

  1. 提供了一个统一的算法流程,降低了代码的重复性。

  2. 可以在不改变算法结构的情况下,扩展或修改算法的具体步骤。

  3. 提供了一个钩子方法,允许子类对算法进行扩展或修改。

模板模式适用于以下场景:

  1. 当有一个算法的流程固定,但其中某些步骤的实现可能变化时,可以使用模板模式。

  2. 当需要在不改变算法整体结构的情况下,对算法的某些步骤进行扩展或修改时,可以使用模板模式。

总结而言,模板模式通过定义一个抽象类作为算法的骨架,将一些步骤的具体实现延迟到子类中。它提供了一个统一的算法流程,但允许子类根据需要重写算法的具体步骤,提高了代码的可复用性和扩展性。

 

public class ImageBuffer
    {
        public byte[] Data { get; set; }
    }

 

Abstract Class

/// <summary>
    /// 相机
    /// </summary>
    public abstract class CameraBase
    {
        /// <summary>
        /// 模板方法
        /// </summary>
        public void Initialize()
        {
            DoInitialize();
            DoStart();
        }

        public abstract void DoInitialize();
        public abstract void DoStart();

        public ImageBuffer Trigger()
        {
            Console.WriteLine("获取一张图像!");

            return new ImageBuffer();
        }
    }

 

Concrete Class

/// <summary>
    /// 海康相机
    /// </summary>
    public class HaiKangCamera : CameraBase
    {
        public override void DoInitialize()
        {
            Console.WriteLine("引入海康厂加提供的API,调用API中LoadDevice()");
        }

        public override void DoStart()
        {
            Console.WriteLine("找到本机所有相机,并定义回调函数,开始工作...");
        }
    }
/// <summary>
    /// 大华相机
    /// </summary>
    public class DaHuaCamera : CameraBase
    {
        public override void DoInitialize()
        {
            Console.WriteLine("初始化大华相机...");
        }

        public override void DoStart()
        {
            Console.WriteLine("大华相机开始工作...");
        }
    }

 

Client

internal class Client
    {
        public void Start()
        {
            CameraBase dh = new DaHuaCamera();
            dh.Initialize();
            var image1 = dh.Trigger();

            CameraBase hk=new HaiKangCamera();
            hk.Initialize();
            var image2=hk.Trigger();
        }   
    }

调用

static void Main(string[] args)
        {
            new Client().Start();

            Console.ReadKey();
        }

 

标签:15,子类,void,模式,算法,抽象类,public,模板
From: https://www.cnblogs.com/MingQiu/p/18067859

相关文章

  • 14_访问者模式
    访问者模式是一种行为型设计模式,它允许在不改变被访问对象结构的前提下,定义对这些对象的新操作。访问者模式将操作和对象结构分离,使得可以在不修改对象结构的情况下添加新的操作。访问者模式有四个主要角色:抽象访问者(Visitor):定义了访问者可以访问的对象的接口,包含了一系列的访......
  • 13_代理模式
    代理模式是一种结构型设计模式,它提供了一个代理对象来控制对其他对象的访问。代理对象可以作为目标对象的代表,以控制对目标对象的访问、限制或增加功能。代理模式有三个主要角色:抽象主题(Subject):定义了目标对象和代理对象的公共接口,可以是抽象类或接口。真实主题(RealSubjec......
  • 12_享元模式
    享元模式是一种结构型设计模式,它通过共享细粒度的对象来最大限度地减少内存使用和对象创建的数量。享元模式通过将共享对象的状态外部化,使得对象可以共享,并提供了一个工厂类来管理共享对象的创建和获取。享元模式有五个主要角色:享元接口(Flyweight):定义了共享对象的接口,包含了需......
  • 洛谷题单指南-线性表-P1540 [NOIP2010 提高组] 机器翻译
    原题链接:https://www.luogu.com.cn/problem/P1540题意解读:本题模拟内存的调入调出,内存先入先出的特性就是队列。解题思路:本题需要两种数据结构:队列、数组队列用来模拟内存的操作,数组充当hash表用于判断单词在内存是否存在核心逻辑:对于每一个单词,如果内存不存在,查一次词典,再将......
  • 11_外观模式
    外观模式是一种结构型设计模式,它提供了一个统一的接口,用于访问子系统中的一组接口。外观模式通过将客户端与子系统之间的复杂依赖关系解耦,简化了客户端的使用。外观模式有三个主要角色:外观(Facade):提供了一个统一的接口,用于访问子系统中的一组接口。外观封装了子系统的复杂性,简......
  • Redis安装之集群-哨兵模式(sentinel)模式
    官网说明:https://redis.io/docs/management/sentinel/一、背景Redis主从复制模型在一定程度上解决了读写分离、容灾恢复、数据备份、水平扩容支撑高并发的问题,但仍存在单点故障问题,即Mater宕机后,集群将无法提供写服务。二、方案原理主从复制的问题在于Mater宕机后,Slave......
  • 保护模式
    一、理解保护模式  大多数现代操作系统(包括Windows9X/NT/XP和Linux等)都是多任务的,CPU的保护模式是操作系统实现多任务的基础。了解保护模式的底层原理对学习操作系统有着事半功倍的作用。  保护模式是为了实现多任务而设计的,其名称中的“保护”就是保护任务环境中各个人物......
  • 观察者模式
     观察者:publicinterfaceObserver{voidupdate(floattemperature,floathumidity,floatpressure);}主体;publicinterfaceSubject{publicvoidregisterObserver(Observerobserver);publicvoidremoveObserver(Observerobserver);......
  • Django模板语法
    Django模版语法(1)传数据模版语法可以传递的后端python数据类型(可迭代)后端:deftest2(request):name='heart'float=11.11str_name='你好'boolean_test=Truelist_test=[1,2,3]tuple_test=(1,2,3)dict_test={'name�......
  • 滑动窗口模板
    适用情景:字符串或数组的子串或子数组模板defslidingWindow(s,t):need={}#存储字符串t中各个字符的需求量window={}#存储滑动窗口中各个字符的出现次数forcint:#遍历字符串tneed.setdefault(c,0)#访问不存在的键时自动创建并......