设计模式——策略模式

策咯模式

在策略模式中,一个类的行为或其算法可以在运行时更改。(策略模式属于行为模式的一种)。主要解决:在多种算法相似的情况下,使用if…else所带来的复杂和难以维护的情况。

优点:1.算法可以自由切换。2.避免使用多重条件判断。3.扩展性好。
缺点:1.策略类会增多。2.所有的策略类都需要对外暴露,安全性差。

关键逻辑:让所有的策略类使用同一个接口。
使用场景:1.一个系统里需要动态的在几种算法中选择一种执行。
               2.如果一个对象有很多的行为,不使用设计模式,就必须要使用多重语句来判断了。例如一个英雄选择哪种武器去战斗,需要进行选择。
注意事项:如果一个系统里策略多余四个,就需要使用混合模式,解决策咯模式膨胀的问题。

可参考策略模式的结构:
在这里插入图片描述
我来演示一个例子:一个战士选择用那种武器开火。
具体代码如下:
1.首先创建一个接口枪类:Gun类。(相当于上图的Strategy类)

public interface Gun 
{
    //枪开火的方法
    void Fire();
}

2.创建枪的实体类,具体有哪些枪
相当于上图的OpearationAdd类

/// <summary>
/// 长枪
/// </summary>
public class Spear : Gun
{
    public void Fire()
    {
        Debug.Log("战士使用长枪开火了");
    }
}

相当于上图的OpearationSubstract类

/// <summary>
/// 短枪
/// </summary>
public class ShortGun : Gun
{
    public void Fire()
    {
        Debug.Log("战士使用短枪开火了");
    }
}

相当于上图的OpearationMultiply类

/// <summary>
/// 手枪
/// </summary>
public class Pistol:Gun
{
    public void Fire()
    {
        Debug.Log("战士使用手枪开火了");
    }
}

3.创建一个传递信息的类。(相当于战士告诉下属他今天想用什么武器作战,下属帮他去取)

/// <summary>
/// 传递类
/// </summary>
public class Context
{
    private Gun gun;
    public Context(Gun gun)
    {
        this.gun = gun;
    }
    /// <summary>
    /// 通知开火
    /// </summary>
    public void InformFire()
    {
        gun.Fire();
    }
}

4.创建一个战士类。(战士开始去作战)(相当于上图StrategyPatternDemo)

/// <summary>
/// 战士
/// </summary>
class Soldier: MonoBehaviour
{
    private void Start()
    {
        //战士使用短枪作战
        Context context = new Context(new ShortGun());
        context.InformFire();
    }
}

运行结果
在这里插入图片描述

发布了13 篇原创文章 · 获赞 7 · 访问量 2451
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览