标签:ogr ons tor 下载 大型 不同 额外 行修改 access
单例模式,是一种一种结构型模式,它动态地给一个对象添加额外的职责,采用对象组合而非继承的方式实现了再运行时动态地扩展对象功能的能力。
在软件开发中,我们经常想要对一类对象添加不同的功能,例如要给手机贴膜,添加挂件等,如果此时利用继承来实现的话,就需要定义无数的类,如贴膜手机类StickerPhone、手机挂件类AccessoriesPhone等,这样就会导致 ”子类爆炸“问题,为了解决这个问题,装饰者模式出现了。
public abstract class Phone
{
public abstract void Show();
}
public class ApplePhone : Phone
{
public override void Show()
{
Console.WriteLine("我是iphone手机");
}
}
/// <summary>
/// 手机装饰抽象类
/// </summary>
public abstract class Decorate : Phone
{
Phone phone = null;
public void SetDecorate(Phone phone)
{
this.phone = phone;
}
public override void Show()
{
if (this.phone != null)
{
this.phone.Show();
}
}
}
/// <summary>
/// 配件装饰
/// </summary>
public class Accessories : Decorate
{
public override void Show()
{
base.Show();
//增加一些业务逻辑
Console.WriteLine("对手机进行了配件装饰");
}
}
/// <summary>
/// 贴膜装饰
/// </summary>
public class Sticker : Decorate
{
public override void Show()
{
base.Show();
//增加一些业务逻辑
Console.WriteLine("对手机进行了贴膜装饰");
}
}
/// <summary>
/// 装饰着模式调用
/// </summary>
class Program
{
static void Main(string[] args)
{
Phone phone = new ApplePhone();
Decorate sticker = new Sticker();
Decorate accessories = new Accessories();
//将贴膜装到手机上。。。
sticker.SetDecorate(phone);
//将配件装到贴膜手机上。。。
accessories.SetDecorate(sticker);
//最后将完整的手机Show一下。。。
accessories.Show();
//输出:
//我是iphone手机
//对手机进行了贴膜装饰
//对手机进行了配件装饰
}
}
装饰器模式,从某种角度上说,可能更适合用于对已经成型的业务进行修改的场景,不管是用于动态扩展,还是动态移除,装饰器都能很方便的胜任对对象的修改操作。另外就是,继承也可以解决类似问题,但是装饰器可以更好的扩展,因为,我们一般解决的是特定对象的特定行为,而不会对整个对象进行修改,这样子跟大型重构没有什么区别。所以,特定场景的修改,装饰器来的更快,更简单,更有效率,没有必要兴师动众。
标签:ogr ons tor 下载 大型 不同 额外 行修改 access
原文地址:https://www.cnblogs.com/RenshuozZ/p/11146469.html