首页 > 其他分享 >【设计模式之装饰模式】

【设计模式之装饰模式】

时间:2022-10-17 18:05:28浏览次数:45  
标签:component void Component 模式 public Operation 设计模式 装饰


前言:


装饰模式,属于二十三个设计模式中之一,那么,什么是装饰模式,下面,大家请跟着我一起走进装饰模式,来看看装饰模式:


核心:

(一)、结构图


想知道设计模式吗?那么看了它的UML图,你就一目了然了!


【设计模式之装饰模式】_ide


(二)基本代码


Component类


abstract class Component
{
public abstract void Operation();
}

ConcreteComponent类


class ConcreteComponent:Component
{
public override void Operation()
{
Console.WriteLine("具体对象的操作");
}
}

Decorato类


abstract class Decorator : Component
{
protected Component component;
public void SetComponent(Component component)
{
this.component = component;
}
public override void Operation()
{
if (component != null)
{
component.Operation();
}
}
}

ConcreteDecoratorA类


class ConcreteDecoratorA : Decorator 
{
private string addedState;
public override void Operation()
{
base .Operation();
addedState="New State";
Console.WriteLine("具体操作对象A的操作");
}
}

ConcreteDecoratorB类


class ConcreteDecoratorB : Decorator
{
public override void Operation()
{
base .Operation();
AddedBehavior();
Console .WriteLine ("具体操作对象B的操作");
}
public void AddedBehavior()
{

}
}

客户端代码


static void Main(string[] args)
{
ConcreteComponent c = new ConcreteComponent();
ConcreteDecoratorA d1 = new ConcreteDecoratorA ();
ConcreteDecoratorB d2 = new ConcreteDecoratorB();


d1.SetComponent(c);
d2.SetComponent(d1);
d2.Operation();

}

(三)注意




学习设计模式要善于变通,如果只有一个ConcreteComponent类而没有抽象的Component类,那么Decorator类可以是ConcreteComponent的一个子类,同样道理,如果只有一个ConcreteDecorator类,那么就没有必要建立一个单独的Decoratorl类,而可以把Decorato和ConcreteDecorator的责任合并成一个类。




eg.人靠衣服来打扮


【设计模式之装饰模式】_ide_02





(四)、定义


动态的给对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。


我们可以通过记住穿衣服打扮自己的例子来理解这个装饰模式,装饰自己,就像添加一些额外的功能一样,这样有利于我们的记忆!




(五)、归类


隶属于创建型模式




(六)、优点


简化原有的类,将核心职责和装饰功能分开


总结:


装饰模式,更好的在代码中实现,加以体会。要 当心的是,装饰模式虽然不错,但是我们在用它的时候,要注意装饰的顺序。

标签:component,void,Component,模式,public,Operation,设计模式,装饰
From: https://blog.51cto.com/u_15586641/5763784

相关文章

  • 【设计模式之策略模式】
    前言:最近在学习设计模式,简单工厂是接触的第一个模式,后来,就遇到了策略模式,策略模式真是有谋略啊!定义了算法家族,有了算法家族,再难的计算都不在话下了!!!今天,我们一起来学习策略......
  • 12-Go设计模式-观察模式
    观察模式样例代码/*观察者模式观察者模式是用于建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应作出反应。在观察者模式中,发生......
  • 你还在写垃圾代码?快用 Java 8 重构传统设计模式吧,是真的优雅!
    来源:https://www.cnblogs.com/yjmyzz/p/refactor-design-pattern-using-java8.htmljava8中提供的很多新特性可以用来重构传统设计模式中的写法,下面是一些示例:一、策略模......
  • 10-Go设计模式-命令模式
    命令模式样例代码/*命令模式将一个请求封装为一个对象,从而让我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式是一种......
  • Flink集群部署-standalone部署模式
    简单研究下Flink的任务部署。我们在IDEA开发工具中用代码跑Flink的时候,实际是会虚拟出一个小型的Flink集群,当执行execute的时候是将上面的代码作为一个job提交到Fl......
  • Winform 窗体重命名(改名)后,设计模式对窗体的任何修改都无效,执行结果为改名前的窗体(一个
    (如图)1.新建Winform窗体应用程序  2.窗体设计器不关闭,直接改名 3.设计窗体 4.运行程序,结果(窗体空白) 5.解决方案   5.1丢弃设计,直接关闭设计窗体,重新......
  • Tutorial 3_工厂方法模式
    [实验任务一]:加密算法目前常用的加密算法有DES(DataEncryptionStandard)和IDEA(InternationalDataEncryptionAlgorithm)国际数据加密算法等,请用工厂方法实现加密算法系统......
  • Tutorial 4_抽象工厂工厂模式
    [实验任务一]:人与肤色使用抽象工厂模式,完成下述产品等级结构: 2.1Man.javapackagechouxiang;/**抽象产品类Man*/publicinterfaceMan{publicvoi......
  • Tutorial 5_建造者模式
    [实验任务一]:计算机组装使用建造者模式,完成下述任务:计算机组装工厂可以将CPU、内存、硬盘、主机等硬件设备组装在一起构成计算机,计算机的类型可以是笔记本,也可以是台式机......
  • Java_SE_Lesson_3:接口、单例模式、包与访问控制
    接口中所声明的方法都是抽象方法。接口中的方法都是public​的。接口中也可以定义成员变量。接口中的成员变量都是public,final,static的。一个类不能既是f......