本帖最后由 剑弑 于 2017-10-10 10:40 编辑
国庆长假刚结束很多人都会有假期综合症(我也不例外),所以我找了些装饰者模式的资料看看,顺便写了份示例供大家评判评判
相信电脑对于大家来说都非常非常熟悉了,哪么今天我就以手提电脑为示例跟大家分享分享装饰者模式。很多人买到手提都会接上外接键鼠,手提自身带的键盘大小,对于爱打游戏的朋友来说都不太习惯,鼠标就更不用说了,没用外接鼠标的话打游戏灵活度根本跟不上。
到这里可能很多人都会问,手提电脑使用外接键鼠跟今天讲的装饰者模式有什么关系呢?
大家都不要急,其实软件设计的很多设计模式都来源于我们的生活,只是我们自己没发现而已;好了废话不多说了,我们直接来上代码吧。
首先我们先来新建一个电脑抽象类以及手提电脑类(当然平板电脑类、台式电脑类都可以,本文主要以手提电脑为示例对象)
[C#] 纯文本查看 复制代码
/// <summary>
/// 电脑抽象类
/// </summary>
public abstract class Computer
{
public abstract void GetComputerParts();
}
[C#] 纯文本查看 复制代码
/// <summary>
/// 手提电脑类
/// </summary>
public class PortableComputer:Computer
{
public override void GetComputerParts()
{
Console.Write("手提电脑:\r\n");
}
}
接下来我们来新建一个电脑配件的装饰类及要对手提电脑进行装饰的鼠标配件类和键盘配件类
[C#] 纯文本查看 复制代码 /// <summary>
/// 电脑配件装饰类
/// </summary>
public abstract class DecoratorComputer:Computer
{
private Computer Computer;
public DecoratorComputer(Computer computer)
{
this.Computer = computer;
}
public override void GetComputerParts()
{
if (Computer!=null)
{
Computer.GetComputerParts();
}
}
}
[C#] 纯文本查看 复制代码 /// <summary>
/// 鼠标配件类
/// </summary>
public class MouseParts:DecoratorComputer
{
public MouseParts(Computer computer)
: base(computer)
{
}
public override void GetComputerParts()
{
base.GetComputerParts();
Mouse();
}
public void Mouse()
{
Console.Write("接入鼠标配件\r\n");
Console.Write("鼠标接入完成\r\n");
}
}
[C#] 纯文本查看 复制代码 /// <summary>
/// 键盘配件类
/// </summary>
class KeyboardPrts:DecoratorComputer
{
public KeyboardPrts(Computer computer)
: base(computer)
{
}
public override void GetComputerParts()
{
base.GetComputerParts();
Keyboard();
}
public void Keyboard()
{
Console.Write("接入键盘配件\r\n");
Console.Write("键盘接入完成\r\n");
}
}
最后我们来看看客户端调用代码
[C#] 纯文本查看 复制代码 class Program
{
static void Main(string[] args)
{
Computer computer=new PortableComputer();
DecoratorComputer decoratorComputer=new MouseParts(computer);
decoratorComputer.GetComputerParts();
Console.Write("---------------------我是华丽的分隔线-----------------------\r\n");
decoratorComputer =new KeyboardPrts(computer);
decoratorComputer.GetComputerParts();
Console.Write("---------------------我是华丽的分隔线-----------------------\r\n");
MouseParts mouseParts = new MouseParts(computer);
KeyboardPrts keyboardPrts = new KeyboardPrts(mouseParts);
keyboardPrts.GetComputerParts();
Console.Read();
}
}
结果截图
类图
最后附上源码
Decorator.rar
(48.98 KB, 下载次数: 3)
|