设计模式--6.装饰模式
来源:互联网 发布:高达最强ma 知乎 编辑:程序博客网 时间:2024/06/11 01:24
装饰模式:动态的给一个对象添加一些额外的职责,就增加功能来说,装饰者模式比生成子类更为灵活。
结构图:
![](http://pic002.cnblogs.com/images/2012/155937/2012070314025189.png)
代码实现:
抽象类:
package unit1to6.test6;package unit1to6.test6;public abstract class Component {public abstract void Operation();}具体类:
package unit1to6.test6;public class ConcreteCompent extends Component{@Overridepublic void Operation() {System.out.println("具体对象的操作");}}抽象装饰类:
package unit1to6.test6;public class Decorator extends Component{protected Component component;public void setComponent(Component component){this.component=component;}@Overridepublic void Operation() {if(component!=null){component.Operation();}}}具体装饰类:
package unit1to6.test6;public class ConcreteDecoratorA extends Decorator{private String addedState;public void Operation(){super.Operation();addedState="New State";System.out.println("具体装饰对象A的操作");}}
具体装饰类2:
package unit1to6.test6;public class ConcreteDecoratorB extends Decorator{public void Operation(){super.Operation();AddedBehavior();System.out.println("具体装饰对象B的操作");}private void AddedBehavior(){System.out.println("装饰对象B的特有操作");}}客户端类:
package unit1to6.test6;public class mainTest {/* 装饰者模式 * 动态的给一个对象添加一些额外的职责,就增加功能来说,装饰者模式比生成子类更加灵活。 * c,d1,d2有共同的父类 * Decorator中有共同父类的对象,顾new 一个c,可以用来初始化d1,d2 * * 功能: * 为已有功能动态的添加更多功能的一种方式。 * 使用场景:一个阶段需要的功能,需要执行顺序,执行个数有变话的功能。 * */public static void main(String[] args) {ConcreteCompent c=new ConcreteCompent();ConcreteDecoratorA d1=new ConcreteDecoratorA();ConcreteDecoratorB d2=new ConcreteDecoratorB();d1.setComponent(c);//告诉需要装饰的对象d2.setComponent(d1);d2.Operation();}}
0 0
- 设计模式--6.装饰模式
- 设计模式---装饰模式
- 设计模式:装饰模式
- 设计模式------装饰模式
- 设计模式--装饰模式
- 设计模式--装饰模式
- 设计模式--装饰模式
- 设计模式 装饰模式
- 设计模式----装饰模式
- 设计模式-【装饰模式】
- 设计模式--装饰模式
- 设计模式装饰模式
- 设计模式 - 装饰模式
- 设计模式-----装饰模式.
- 设计模式-----装饰模式.
- [ 设计模式 ] 装饰模式!
- 设计模式:装饰模式
- 设计模式 - 装饰模式
- 基于ROS平台的移动机器人-1-小车底盘的搭建
- SQL调优
- think in java interview-高级开发人员面试宝典(七)
- HBase 默认配置说明(收藏版) http://www.aboutyun.com/thread-7914-1-1.html (出处: about云开发)
- 我的学习笔记-->String类和StringBuffer类的区别
- 设计模式--6.装饰模式
- 直接插入排序
- cf 759 A Pavel and barbecue
- C++ Primer 第5版--练习9.26
- 414. Third Maximum Number
- TortoiseGit操作本地仓库的详细使用方法(2)-分支操作
- nginx下配置urlrewrite 单一入口
- CentOS记事
- 初学者必看的Ajax总结篇