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();
查看全文
相关阅读:
vsftpd不支持目录软链接的解决办法
SVN添加忽略目录
Mysql 默认编码问题
php-fpm 信号
基于MAVEN使用IDEA创建dubbo入门项目图文教程
taotao商城遇到的问题
git push后出错
Mybatis逆向工程自动生成代码(Ubuntu18.04-idea环境)
git add.后回退 代码丢失
对象的共享
原文地址:https://www.cnblogs.com/tommyli/p/1069696.html
最新文章
Springboot源码学习_启动类
SpringCloud 周边服务学习
spring cloud微服务
Hadoop自定义输出文件名
会议
pyinstaller打包
关于BMP格式文件LSB信息隐藏算法
python配置环境变量
编译原理,例:词法分析器
C++标准库类模板(stack)和 队列(queue)
热门文章
折半查找
C++标准库类模板vector
冒泡排序和其两种优化
SQLite数据类型
右值引用
关于static的一些应用
vim配置
PHP 编译安装
c++ 使用WinHTTP实现文件下载功能
SVN一直提示需要clean up
Copyright © 2011-2022 走看看