zoukankan
html css js c++ java
装饰
1:简介
装饰(Decorator)模式又名包装(Wrapper)模式[GOF95]。装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。
2:类图
抽象构件(Component)角色:
给出一个抽象接口,以规范准备接收附加责任的对象。
具体构件(Concrete Component)角色:
定义一个将要接收附加责任的类。
装饰(Decorator)角色:
持有一个构件(Component)对象的实例,并定义一个与抽象构件接口一致的接口。
具体装饰(Concrete Decorator)角色:
负责给构件对象"贴上"附加的责任。
3:代码
//
抽象构件(Component)角色
public
abstract
class
Tank
{
public
abstract
void
Shot();
}
//
具体构件(Concrete Component)角色
public
class
T50 : Tank
{
public
override
void
Shot()
{
}
}
//
装饰(Decorator)角色
public
abstract
class
Decorator : Tank
//
Do Like
{
private
Tank tank;
//
Has-a
public
void
SetComponent(Tank tanks)
{
this
.tank
=
tanks;
}
public
override
void
Shot()
{
this
.tank.Shot();
}
}
//
具体装饰(Concrete Decorator)角色
public
class
ConcreteDecoratorA : Decorator
{
public
override
void
Shot()
{
System.Console.WriteLine(
"
增加夜视能力
"
);
base
.Shot();
}
}
//
具体装饰(Concrete Decorator)角色
public
class
ConcreteDecoratorB : Decorator
{
public
override
void
Shot()
{
System.Console.WriteLine(
"
增加卫星定位能力
"
);
base
.Shot();
}
}
/**/
/*
public abstract class Tank
{
public abstract void Shot();
}
public class T50 : Tank
{
public override void Shot()
{
}
}
public abstract class Decorator : Tank
{
private Tank tank;
public Decorator(Tank _tank)
{
this.tank = _tank;
}
public override void Shot()
{
}
}
public class DecoratorA : Decorator
{
public DecoratorA(Tank tank)
: base(tank)
{
}
public override void Shot()
{
System.Console.WriteLine("增加夜视能力");
base.Shot();
}
}
public class DecoratorB : Decorator
{
public DecoratorB(Tank tank)
: base(tank)
{
}
public override void Shot()
{
System.Console.WriteLine("增加夜视能力");
base.Shot();
}
}
*/
//
调用
Bll.Decorator.Tank t50
=
new
Bll.Decorator.T50();
Bll.Decorator.ConcreteDecoratorA concreteDecoratorA
=
new
Bll.Decorator.ConcreteDecoratorA();
Bll.Decorator.ConcreteDecoratorB concreteDecoratorB
=
new
Bll.Decorator.ConcreteDecoratorB();
concreteDecoratorA.SetComponent(t50);
concreteDecoratorB.SetComponent(concreteDecoratorA);
concreteDecoratorB.Shot();
查看全文
相关阅读:
Heroku
windows平台
ORTP编译为静态库的问题
关于Visual Studio 2013 编译 multi-byte character set MFC程序出现 MSB8031 错误的解决办法
Windows API 磁盘
Unity项目苹果提审Mach-O文件大于80M问题解决方法
Unity加载prefab时调用脚本函数顺序和内存释放问题
Unity3d中多足怪的物理RagDoll实现
手游各个系统及UI架构剖析
手游客户端数据表接入随笔
原文地址:https://www.cnblogs.com/tommyli/p/1069696.html
最新文章
学习SVG系列(3):SVG Stroke属性
学习SVG系列(2):SVG图形系列
学习SVG系列(1):SVG基础
Camstar MES 5.8 發現Ajax事件失效
验证(C#和正则表达式)
新MES已上線
Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine
[转]15年双11手淘前端技术巡演
[转]新兵训练营系列课程——编写优雅代码
[转]新兵训练营系列课程——海量数据存储基础
热门文章
[转]新兵训练营系列课程——平台RPC框架介绍
[转]mysql binlog in realtime
Cordova
Cordova
Cordova
Cordova
Cordova
Cordova
Cordova
Cordova
Copyright © 2011-2022 走看看