C#设计模式——装饰模式
前言
装饰模式是结构型模式,它的作用在于扩展,当一个产品需要添加一个小零件、小功能时,重新写一个接口,就不那么方便,这时就需要使用装饰模式了。通过动态地给一个对象添加额外的职责。
方案思路
装饰模式需要以下4个模块:
1:抽象构建(Component):定义一个抽象接口,用以给这些对象动态地添加职责。
2:具体构建(ConcreteComponent):定义一个具体的对象,也可以给这个对象添加一些职责。
3:装饰类(Decorator): 装饰抽象类,继承了Component,从外类来扩展Component类的功能。
4:具体装饰者(ConcretorDecorator):负责给构建对象添加职责。
在下面的例子中,给手机添加一些小部件,比如贴膜,套手机壳,使用装饰模式就非常灵活的的提供了添加部件的功能,且扩展性很高,也符合单一职责的原则。
Code
以下代码经过测试,可直接在项目中使用
/// <summary>
/// 测试类
/// </summary>
public class DecoratorTest : MonoBehaviour
{
void Start()
{
Phone ApplePhone = new ApplePhone();
//添加保护膜
ApplePhone = new AddSticker(ApplePhone);
ApplePhone.ShowInfo();
//添加保护套
ApplePhone = new AddShell(ApplePhone);
ApplePhone.ShowInfo();
}
}
/// <summary>
/// 手机基类:抽象构建(Component)
/// </summary>
public abstract class Phone
{
public abstract void ShowInfo();
}
/// <summary>
/// 具体手机:具体构建(ConcreteComponent)
/// </summary>
public class ApplePhone : Phone
{
public override void ShowInfo()
{
Debug.Log("这是苹果手机");
}
}
/// <summary>
/// 装饰类(Decorator): 装饰抽象类,继承了Component,从外类来扩展Component类的功能
/// </summary>
public abstract class Decorator : Phone
{
private Phone phone;
public Decorator(Phone phone)
{
this.phone = phone;
}
public override void ShowInfo()
{
phone.ShowInfo();
}
}
/// <summary>
/// 贴膜:具体装饰者(ConcretorDecorator)
/// </summary>
public class AddSticker : Decorator
{
public AddSticker(Phone phone) : base(phone)
{
}
public override void ShowInfo()
{
base.ShowInfo();
AddSticker_Func();
}
private void AddSticker_Func()
{
Debug.Log("添加了一个保护膜");
}
}
/// <summary>
/// 手机壳:具体装饰者(ConcretorDecorator)
/// </summary>
public class AddShell : Decorator
{
public AddShell(Phone phone) : base(phone)
{
}
public override void ShowInfo()
{
base.ShowInfo();
AddShell_Func();
}
private void AddShell_Func()
{
Debug.Log("添加了一个手机壳");
}
}
END
感谢阅读
你知道的越多,你不知道的越多
我是EAST
一个靠互联网苟且偷生的程序员
咱们下期见!
扫描二维码关注我吧