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();
查看全文
相关阅读:
好记性不如烂笔头,要经常把学习的东西记录下来
liunx git 已经设置了ssh key 还是需要帐号和密码的解决方法。
解决composer ssl required for SSL/TLS 证书配置
composer SSL: Handshake timed out 解决办法
小程序解密报错:IV passed is 24 bytes long which is longer than the 16 expected by se
PHP面向对象试题(基础部分)
php 单例模式
在Thinkphp里面加入验证码插件
phpstorm 修改默认注释
用PHP去掉文件头的Unicode签名(BOM)
原文地址:https://www.cnblogs.com/tommyli/p/1069696.html
最新文章
不使用ajax,无刷新提交表单
http 状态码
css3背景颜色渐变
transition & transform
css hack 整理
五种清除浮动的方式
base.js
common.css
手机注册,即发送验证码进行验证
通过邮箱注册,即发送邮件于指定邮箱
热门文章
js 生成二维码并打印
ios 分享新浪微博
ios textView显示html文本
NSLayoutConstraint的使用
ios 选择图片
ios 文件上传到SpringMVC
thymeleaf标签 th:each的使用
thymeleaf标签 th:attr的使用
EntityFramework 6.0 修改一个已经存在的对象
mac 安装软件提示 已损坏,无法打开,您应该将它移到废纸篓的解决办法
Copyright © 2011-2022 走看看