首页 > 编程语言 > 详细

Unity---游戏设计模式(17)之装饰模式

时间:2019-10-26 12:57:27      阅读:83      评论:0      收藏:0      [点我收藏+]



概述参考请看 参考博客

1、装饰模式原型

装饰模式原型UML
技术分享图片

装饰模式原型代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DecorateMode : MonoBehaviour
{
    private void Start () {

        ICoffee coffee1 = new LightCoffee();
        Debug.Log("咖啡容量:" + coffee1.Capacity() + "咖啡价格:" + coffee1.Cost());

        coffee1 = coffee1.AddDecorate(new MilkDecorate());
        Debug.Log("添加牛奶后咖啡容量:" + coffee1.Capacity() + "咖啡价格:" + coffee1.Cost());

        coffee1 = coffee1.AddDecorate(new PearlDecorate());
        Debug.Log("添加珍珠后咖啡容量:" + coffee1.Capacity() + "咖啡价格:" + coffee1.Cost());
    }
}

/// <summary>
/// 咖啡
/// </summary>
public abstract class ICoffee
{
    //咖啡的容量和消费
    public abstract double Capacity();
    public abstract double Cost();

    /// <summary>
    /// 给咖啡添加调料,会改变咖啡
    /// </summary>
    public ICoffee AddDecorate(DecorateCoffee decorate)
    {
        decorate.Coffee = this;
        return decorate;
    }
}
//淡咖啡和浓咖啡
public class LightCoffee : ICoffee
{
    public override double Capacity()
    {
        return 100;
    }

    public override double Cost()
    {
        return 20;
    }
}
public class StrongCoffee : ICoffee
{
    public override double Capacity()
    {
        return 150;
    }

    public override double Cost()
    {
        return 15;
    }
}

/// <summary>
/// 装饰咖啡类
/// </summary>
public class DecorateCoffee : ICoffee
{
    /// <summary>
    /// 要装饰的咖啡对象
    /// </summary>
    protected ICoffee mCoffee;
    public ICoffee Coffee { set { mCoffee = value; } }

    public override double Capacity()
    {
        return mCoffee.Capacity();
    }

    public override double Cost()
    {
        return mCoffee.Cost();
    }
}

/// <summary>
/// 添加牛奶。容量+20,价格+3。
/// </summary>
public class MilkDecorate : DecorateCoffee
{
    public override double Capacity()
    {
        return mCoffee.Capacity() + 20;
    }

    public override double Cost()
    {
        return mCoffee.Cost() + 3;
    }
}
/// <summary>
/// 添加珍珠。容量+10,价格+2。
/// </summary>
public class PearlDecorate : DecorateCoffee
{
    public override double Capacity()
    {
        return mCoffee.Capacity() + 10;
    }

    public override double Cost()
    {
        return mCoffee.Cost() + 2;
    }
}

结果
技术分享图片

2、装饰模式优缺点

优点

  1. 扩展性高,灵活性强。

缺点

  1. 类的数量较多。
  2. 某些情况下可能产生装饰过多的异常。

Unity---游戏设计模式(17)之装饰模式

原文:https://www.cnblogs.com/Fflyqaq/p/11742270.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!