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();
查看全文
相关阅读:
Add a Simple Action using an Attribute 使用特性添加简单按钮
通俗易懂,什么是.NET/.NET Framework/.NET Core/.Net Standard?
一文详解微服务架构
我是如何失去团队掌控的?
如何高效的学习技术
Implement Property Value Validation in Code 在代码中实现属性值验证(XPO)
设计模式学习笔记 ———— 简单工厂模式
#ifndef/#define/#endif使用详解
模块化开发
源代码生成可执行文件的内部机理
原文地址:https://www.cnblogs.com/tommyli/p/1069696.html
最新文章
Filter Lookup Editor Data Source 筛选器查找编辑器数据源
Make a Property Calculable 使属性可计算
Localize UI Elements 汉化界面(本地化)
Use a Multiline Editor for String Properties 对字符串属性使用多行编辑器
Format a Property Value 设置属性值的格式
Customize the View Items Layout 自定义视图项目布局
Implement Property Value Validation in the Application Model 在应用程序模型中实现属性值验证
Add an Item to the Navigation Control 将项目添加到导航控件
Add an Item to the New Action 在新建按钮中增加一个条目
Display a Detail View with a List View 主子视图-列表视图与详细信息视图同时显示
热门文章
Change Field Layout and Visibility in a List View 在列表视图中更改字段布局和可见性
Add an Editor to a Detail View 将编辑器添加到详细信息视图
Place an Action in a Different Location 设置按钮的显示位置
Access Grid Control Properties 访问网格控件属性
Specify Action Settings 指定按钮设置
Assign a Custom Image 设置自定义图标
Format a Business Object Caption 设置业务对象标题的格式
Assign a Standard Image 设置图标
Add an Action with Option Selection 添加具有选项选择的按钮
Add a Simple Action添加简单按钮
Copyright © 2011-2022 走看看