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();
查看全文
相关阅读:
Java反编译插件Jad及eclipse编译插件JadClipse综合使用
Java IO示例总结
java Statement与preparedStatement的区别
Android TabHost 文字及图片的设置
Android EditText属性
ubuntu 软件安装及卸载
Android 设置控件不可见且不占用空间
Ubuntu 11 安装后要做的20件事情
Ubuntu Samba安装与创建目录
Android Service
原文地址:https://www.cnblogs.com/tommyli/p/1069696.html
最新文章
实际举例C#引用类型和值类型的区别study(转)
Asp.net数据库SQL数据库操作学习笔记
PS常用快捷键及技巧总结
TransactSQL编程规范
jsp request 对象详解
屏幕取字原理
WML教程9:Select List 控件
jsp web项目开发详述
美化表单
开通Blog留念
热门文章
JSP 9个内置对象
Java NIO概念及示例
NoSQL一些基础
java注解综合应用总结
枚举类综合应用
eclipse代码加版权头插件
Groovy笔记2(正则表达式,闭包,数据库操作,swing)
WMI笔记1
Java7 一些新特性及脚本语言支持API笔记
Groovy笔记1(特性,字符串处理,集合,运算符)
Copyright © 2011-2022 走看看