欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C#--设计模式(装饰者模式)

程序员文章站 2022-03-14 10:14:42
...

对一个对象的功能进行扩展,不用改变原有状态,通过创建一个类包装之前的对象。
例题:女生爱化妆,原型是一个女生,底妆类包裹原型,画眉类包裹原型,眼影类包裹原型,口红类包裹原型,最终得到一个画了美美妆的漂亮女生了。
在HeadFirst中,原型为浓咖啡,淡咖啡,通过奶泡等一系列配料做成咖啡。也就是原型的价格不断被装饰类进行包裹,最终得到加好配料后得到最终的价格。
C#--设计模式(装饰者模式)

public abstract class IGirl  {
    public abstract void Show();
}
public class ConcreateGirl : IGirl
{
    public override void Show()
    {
        Debug.Log("我是一名女孩");
    }
}
public abstract class DecorateGirl : IGirl {
    private IGirl girl;
    public void  SetGirl(IGirl _girl)
    {
        this.girl = _girl;
    }
    public override void Show()
    {
        if (girl!=null)
        {
            girl.Show();
        }
    }
}
public class EyesDecorate : DecorateGirl {

    public override void Show()
    {
        base.Show();
        AddAction();
    }
    private void AddAction()
    {
        Debug.Log("上眼影");
    }
}
public class EyebrowDecorate : DecorateGirl
{
 
    public override void Show()
    {
        base.Show();
        AddAction();
    }
    public void AddAction()
    {
        Debug.Log("画眉毛");
    }
}
public class LipDecorate : DecorateGirl {

  
    public override void Show()
    {
        base.Show();
        AddAction();
    }
    public void AddAction()
    {
        Debug.Log("涂口红");
    }
}
public class TestDecorate : MonoBehaviour {

	// Use this for initialization
	void Start () {
        IGirl concreateGirl = new ConcreateGirl();
        DecorateGirl eye = new EyesDecorate();
        DecorateGirl lip = new LipDecorate();
        DecorateGirl eyebrow = new EyebrowDecorate();

        eye.SetGirl(concreateGirl);
        lip.SetGirl(eye);
        eyebrow.SetGirl(lip);
        eyebrow.Show();
    }
}

C#--设计模式(装饰者模式)
C#--设计模式(装饰者模式)
缺点:
会造成很多的类。

相关标签: 设计模式