十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
本篇内容介绍了“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的装饰者模式是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!