装饰模式 浅浅的花香味﹌ 2022-06-05 01:25 206阅读 0赞 ### 装饰模式 ### 装饰模式:**动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。** 即通过不同的组合方式,可以组合出各种不同的行为。 装饰模式结构图如下: ![这里写图片描述][SouthEast] 装饰模式的基本代码实现: //Component类 abstract class Component{ //对象操作模板方法 public abstract void Operation(); } //ConcreteComponent类 class ConcreteComponent extends Component{ @Override public void Operation(){ print("具体对象操作。。。") } } //Decorator类 abstract class Decorator extends Component{ protected Component component; //设置 Conponent public void setComponent(Component component){ this.component = component; } //重写Operation(),实际执行的是 Component的 Operation() @Override public void Operation(){ if(component != null){ component.Operation(); } } } //ConcreteDecoratorA类 class ConcreteDecoratorA extends Decorator{ //本类独有的功能 private String addState; // //首先运行原 Component的Operation(),再执行本类功能,相当于对原Component做了装饰 @Override public void Operation(){ Super.Operation(); addState = "装饰一个字段"; print("具体装饰对象A的功能") } } //ConcreteDecoratorB类 class ConcreteDecoratorB extends Decorator{ //首先运行原 Component的Operation(),再执行本类功能,相当于对原Component做了装饰 @Override public void Operation(){ Super.Operation(); AddedBehavior(); print("具体装饰对象B的功能") } //本类独有的方法,以区别于concreteDecoratorA private void AddedBehavior(){ } } //客户端代码 public static void main(String[] args){ ConcreteComponent cc = new ConcreteComponent(); ConcreteDecoratorA cd1 = new ConcreteDecoratorA(); ConcreteDecoratorB cd1 = new ConcreteDecoratorB(); cd1.setComponent(cc); //在ConcreteDecoratorA 中对 cc修饰 cd2.setComponent(cd1); //在ConcreteDecoratorB 中对 cd1修饰 cd2.Operation(); } 基于对装饰模式的分析可以看出,装饰模式是利用 setComponent()来对对象进行包装的。每个装饰对象的实现和如何使用这个对象分离开了,每个装饰对象只关心自己的功能,不需要关系如何被添加到对象链中。 如果只有一个ConcreteComponent类而没有抽象的Conponent类,那Decorator类可以是ConcreteComponent的子类。同理如果只有一个ConcreteDecorator子类,就没有必要在建立一个单独的Decorator类,而可以把Decorator和ConcreteDecorator的责任合并为一个类。 装饰模式的特点: 装饰对象和真实对象有相同的接口。 装饰对象中包含一个真实对象的引用。 装饰对象可以接收所有客户端的请求,并将这些请求转发给真实对象。并且可以在转发这些请求之前或之后增加一些功能。 通过使用不同的装饰类以及自由的排列组合装饰类,可以制造出很多中不同的行为组合。 再来提一个简单的需求:通过装饰模式实现不同的穿着搭配,只要在客户端通过自由组合具体装饰类即可。 需求分析类图如下: ![这里写图片描述][SouthEast 1] 具体代码就靠自己写啦~~ [SouthEast]: /images/20220605/4a6c58f8e5194e1ca7167fdaf8257af6.png [SouthEast 1]: /images/20220605/2bd1dc753fea4e489939f8dc6b5f0b1b.png
相关 装饰模式 转载自:[http://blog.csdn.net/wuzhekai1985/article/details/6672614][http_blog.csdn.net_wuzhe 向右看齐/ 2022年08月11日 08:29/ 0 赞/ 191 阅读
相关 装饰模式 装饰模式 1、他所应对的问题 装饰模式主要是应对,按现有业务返回的结果,无法满足新的业务的需要了。而新的业务只是在原有结果上进行了变动。 真的这种情况 如 悠悠/ 2022年07月17日 15:26/ 0 赞/ 224 阅读
相关 装饰模式 装饰模式 装饰模式:动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。 即通过不同的组合方式,可以组合出各种不同的行为。 装饰模式结构图如 浅浅的花香味﹌/ 2022年06月05日 01:25/ 0 赞/ 207 阅读
相关 装饰模式 1.使用场景: 在已有的功能上边需要动态的添加新的功能。 2.UML表示 在装饰器模式中通常用以下的几类对象: 抽象构件角色(Project):给出一个接口, 骑猪看日落/ 2022年05月31日 09:27/ 0 赞/ 249 阅读
相关 装饰模式 定义 装饰模式:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类模式更加灵活。 结构图 ![这里写图片描述][70] 装饰模式的简化: - 日理万妓/ 2022年05月14日 11:28/ 0 赞/ 233 阅读
相关 装饰模式 1、一个相片放入了相框,那么相框装饰了相片。相片相当于component类,相框相当于Decorator类。我们可以发现,相框里面包含一个相片,所以有了一个has-a的关系;但 àì夳堔傛蜴生んèń/ 2022年02月23日 14:40/ 0 赞/ 204 阅读
相关 装饰模式 Decorator装饰模式是一种结构型模式,它主要是解决:“过度地使用了继承来扩展对象的功能”,由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性;并且随着子类的增多(扩 本是古典 何须时尚/ 2022年02月23日 14:38/ 0 赞/ 218 阅读
相关 装饰模式 概述 23种设计模式之一,英文叫DecoratorPattern,中文也叫装饰模式、修饰模式。装饰模式是在不改变类文件和不使用继承的情况下,运行期动态扩展一个对象的功能。 迷南。/ 2022年02月16日 19:11/ 0 赞/ 207 阅读
相关 装饰模式 前言 装饰模式(Decorator),动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。 一、Component抽象类 绝地灬酷狼/ 2021年12月09日 00:43/ 0 赞/ 250 阅读
相关 装饰模式 有抽象类名为早餐,现在具体的食物只需继承早餐抽象类,就可以作为早餐。 具体构件类,如只有breakfast抽象类和Hamburger类,满足需求。 如果需求改变,hamb 分手后的思念是犯贱/ 2021年09月28日 07:06/ 0 赞/ 307 阅读
还没有评论,来说两句吧...