本篇内容介绍了“java的装饰者模式是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
动态地给一个对象添加额外的职责。
装饰者模式的基本结构如下:
Component
定义一个对象接口,可以给这些对象动态地添加职责。
ConcreteComponent
Decorator
装饰角色,持有一个Component对象的实例,并定义一个与Componnet接口一致的接口。
ConcreteDecorator
二、装饰者模式示例
TheGreatestSage (Component)
package com.wangmengjun.tutorial.designpattern.decorator;public interface TheGreatestSage { void move();}
Change (Decorator)
package com.wangmengjun.tutorial.designpattern.decorator;public class Change implements TheGreatestSage { private TheGreatestSage sage; public Change(TheGreatestSage sage) { this.sage = sage; } public void move() { sage.move(); }}
Monkey (ConcreteComponent)
package com.wangmengjun.tutorial.designpattern.decorator;public class Monkey implements TheGreatestSage { public void move() { System.out.println("Monkey move~~"); }}
Bird (ConcreteDecorator1)
package com.wangmengjun.tutorial.designpattern.decorator;public class Bird extends Change { public Bird(TheGreatestSage sage) { super(sage); } @Override public void move() { System.out.println("Bird move~~"); }}
Fish(ConcreteDecorator2)
package com.wangmengjun.tutorial.designpattern.decorator;public class Fish extends Change { public Fish(TheGreatestSage sage) { super(sage); } @Override public void move() { System.out.println("Fish move~~"); }}
package com.wangmengjun.tutorial.designpattern.decorator;public class Client { public static void main(String[] args) { TheGreatestSage sage = new Monkey(); /** * 单层封装 */ TheGreatestSage bird = new Bird(sage); //bird.move(); TheGreatestSage fish = new Fish(bird); //fish.move(); /** * 多层封装 */ TheGreatestSage fish3 = new Fish(new Bird(sage)); fish3.move(); }}
这种方式是否似曾相识 ?
new BufferedReader(new FileReader("F:\\test.txt"));
三、小结
3.1 适用场景
需要扩展一个类的功能,或者给一个类增加附加责任。
需要动态地给一个对象增加功能,这些功能可以再动态地撤销。
需要增加由一些基本功能的排列组合而产生的非常大量的功能,从而使继承关系变得不现实。
3.2 优点 vs 缺点
优点
装饰模式与继承关系的目的都是扩展对象的功能,但是装饰模式可以提供比继承更多的灵活性。装饰模式允许系统动态地决定“贴上”一个需要的“装饰”,或者去除一个不需要的“装饰”。而继承关系则不同,继承关系是静态的,它在系统运行前就决定了,运行时是不能改变的。
装饰者模式不试图在一个复杂的可定制的类中支持所有可预见的特性。相反你可以定义一个简单的类,并且使用Decorator类给它逐渐的添加功能。可以从一个简单的部件组合出复杂的功能。可以创造出出很多不同行为的组合。
缺点
使用装饰模式会产生比使用继承关系更多的对象,这些对象看上去类似。更多的对象会使得查错变得困难,特别是这些对象看上去都很相像。
“java的装饰者模式是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/wangmengjun/blog/5010111