设计模式之装饰器模式
时间:2022-07-22
本文章向大家介绍设计模式之装饰器模式,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
设计模式之装饰器模式
结构
说明
Attach additional responsibilities to an object dynamically keeping the same interface. Decorators provide a flexible alternative to subclassing for extending functionality.
向某个对象动态地添加更多的功能。修饰模式是除类继承外另一种扩展功能的方法。
适用条件
- 在不影响其他对象的情况下, 以动态且透明的方式添加单个对象的功能;
- 处理那些可以撤销的功能;
- 不能采用生成子类的方法扩充时;
实现
interface IWindow {
void Draw();
string GetDescription();
}
class SimpleWindow : IWindow {
public void Draw() {
//
}
public string GetDescription() {
return "Simple window";
}
}
class WindowDecorator : IWindow {
protected IWindow DecoratedWindow;
public WindowDecorator(IWindow decoratedWindow) {
this.DecoratedWindow = decoratedWindow;
}
public virtual void Draw() {
this.DecoratedWindow.Draw();
}
public virtual string GetDescription() {
return "Window decorator";
}
}
class VerticalScrollbarWindow : WindowDecorator {
public VerticalScrollbarWindow(IWindow decoratedWindow) : base( decoratedWindow) {
}
public override void Draw() {
base.Draw();
this.DrawVerticalScrollbar();
}
private void DrawVerticalScrollbar() {
//
}
public override string GetDescription() {
return this.DecoratedWindow.GetDescription() + ", include vertical scrollbars";
}
}
class HorizontalScrollbarWindow : WindowDecorator {
public HorizontalScrollbarWindow(IWindow decoratedWindow) : base( decoratedWindow) {
}
public override void Draw() {
base.Draw();
this.DrawHorizontalScrollbar();
}
private void DrawHorizontalScrollbar() {
//
}
public override string GetDescription() {
return this.DecoratedWindow.GetDescription() + ", include horizontal scrollbars";
}
}
class Program {
static void Main(string[] args) {
IWindow window = new HorizontalScrollbarWindow(new VerticalScrollbarWindow (new SimpleWindow()));
Console.WriteLine(window.GetDescription());
Console.ReadKey();
}
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- JAVA-判断两个单链表是否相交并求交点
- 删除排序数组中重复元素的方法
- zookeeper-3.4.10伪集群模式搭建及简单操作
- 04 Confluent_Kafka权威指南 第四章: kafka消费者:从kafka读取数据
- JAVA中的单例模式分析(doublecheck和枚举实现)
- 有关JAVA自动装箱-拆箱的分析
- 10 Confluent_Kafka权威指南 第十章:监控kafka
- 解决elasticsearch“Too many open files in system”问题
- elk基于jolokia监控springboot应用jvm方案
- elasticsearch集群更换节点操作
- 对storm1.2.3并行度的理解
- RabbitMQ集群搭建过程
- java中的reference(一): GC与4种基本的Reference(强软弱虚)
- java中的reference(三): FinalReference和Finalizer的源码分析
- 【ceph】性能测试工具cosbench(1)