设计模式(23)----- 模板方法

概念:

在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。

意图:

定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

主要解决:

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

优点:

  • 封装不变部分,扩展可变部分。
  • 提取公共代码,便于维护。
  • 行为由父类控制,子类实现。

缺点:

  • 每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。

实现类图在这里插入图片描述
模式的结构
1)抽象类/抽象模板(Abstract Class)

public abstract class 游戏模式初始化
{
    public abstract void initializeMap();
    public abstract void initializeCha();
    public abstract void initializePlay();

    public void 游戏初始化()
    {
        //初始化地图
        initializeMap();
        //初始化人物
        initializeCha();
        //初始化玩法
        initializePlay();
    }
}

2)具体子类/具体实现(Concrete Class)

using System;

public class _2D模式 : 游戏模式初始化
{
    public override void initializeCha()
    {
        Console.WriteLine("2D模式人物初始化。。。。。"); 
    }

    public override void initializeMap()
    {
        Console.WriteLine("2D模式地图初始化。。。。。");
    }

    public override void initializePlay()
    {
        Console.WriteLine("2D模式玩法初始化。。。。。");
    }
}
using System;

public class _3D模式 : 游戏模式初始化
{
    public override void initializeCha()
    {
        Console.WriteLine("3D模式人物初始化。。。。。");
    }

    public override void initializeMap()
    {
        Console.WriteLine("3D模式地图初始化。。。。。");
    }

    public override void initializePlay()
    {
        Console.WriteLine("3D模式玩法初始化。。。。。");
    }
}

测试

using System;

class Program
{
    static void Main(string[] args)
    {
        游戏模式初始化 m = new _2D模式();
        m.游戏初始化();
        Console.WriteLine("更换模式");
        m = new _3D模式();
        m.游戏初始化();

        Console.Read();
    }
}


输出示例:
在这里插入图片描述
设计模式------首页

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值