首页 / 设计模式 / JAVA设计模式之装饰器模式
JAVA设计模式之装饰器模式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了JAVA设计模式之装饰器模式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2096字,纯文字阅读大概需要3分钟。
内容图文
![JAVA设计模式之装饰器模式](/upload/InfoBanner/zyjiaocheng/609/f7b9876e900047b49495e6bc3869fe3f.jpg)
1.概念:
以对客户透明的方式来扩展对象的功能,用户根据功能需求随意选取组成对象的成分进行动态地将责任附加到对象上,通过方法的链式调用来实现
装饰者提供了比继承更有弹性的替代方案, 简单来讲就是动态的给一个对象增加一些职能,相对与生成子类更加灵活
设计原则为:开闭原则(类应该对扩展开发,对修改关闭)
2.应用以及说明:
1装饰模式增加强了单个对象的能力。Java IO到处都使用了装饰模式,经典的例子就是Buffered系列类如BufferedReader和BufferedWriter,它们增强了Reader和Writer对象,以实现提升性能的Buffer层次的读取和写入。
2该模式中装饰者和被装饰者都继承同一个父类,这里继承的目的是为了达到”类型匹配“,而不是获得父类的”行为“ 摘自(HeadFirst设计模式)
3组合和委托可用于运行时动态地加上新的行为
4装饰者可以在被装饰者的行为前面 与/或后面加上自己的行为,甚至可以将被装饰者的行为整个取代掉,从而达到某种目的
5装饰者会导致设计中出现很多小对象,如果过度使用,会成程序变得很复杂
3. 类图
4. 代码示例
public interface Work {
void doWork();
}
public class CommonWork implements Work {
@Override
public void doWork() {
System.out.println("早安,打工人!");
}
}
public class DoctorWork implements Work {
private CommonWork commonWork;
public DoctorWork(CommonWork commonWork) {
this.commonWork = commonWork;
}
@Override
public void doWork() {
commonWork.doWork();
System.out.println("我的工作就是救死扶伤");
}
}
public class PoliceWorker implements Work {
private CommonWork commonWork;
public PoliceWorker(CommonWork commonWork) {
this.commonWork = commonWork;
}
@Override
public void doWork() {
commonWork.doWork();
System.out.println("我的工作就是保卫大家的安全");
}
}
public class TeacherWork implements Work {
private CommonWork commonWork;
public TeacherWork(CommonWork commonWork) {
this.commonWork = commonWork;
}
@Override
public void doWork() {
commonWork.doWork();
System.out.println("我的工作就是培养祖国的花朵");
}
}
public class WorkTest {
public static void main(String[] args) {
CommonWork commonWork = new CommonWork();
DoctorWork doctorWork = new DoctorWork(commonWork);
doctorWork.doWork();
PoliceWorker policeWorker=new PoliceWorker(commonWork);
policeWorker.doWork();
TeacherWork teacherWork=new TeacherWork(commonWork);
teacherWork.doWork();
}
}
内容总结
以上是互联网集市为您收集整理的JAVA设计模式之装饰器模式全部内容,希望文章能够帮你解决JAVA设计模式之装饰器模式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。