大话设计模式之装饰模式
来源:互联网 发布:淘宝店铺号申请 编辑:程序博客网 时间:2024/05/16 11:36
参考—>《大话之设计模式》感谢作者—org
先看一下结构图
装饰模式
如果只有一个ConcreteComponent类而没有抽象的Component类,那么
Decorator类可以是ConcreteComponent的一个子类
(在这儿的代码就是把Person这个ConcreteComponent类和Finery 这个Decorator类建立了父子关系)
同理
如果只有一个ConcreteDecorator那么也没必要建立一个单独的Decorator
类,而且可以把Decorator和ConcreteDecorator的责任合并成一个类。
代码—>
Person.java (ConcreteComponent)
package co.jp.li.concretecomponent;public class Person { private String name; public Person() { super(); } public Person(String name) {// super(); this.name = name; } public void show(){ System.out.print("を着ている"+this.name); }}
Finery.java(decorator)
package co.jp.li.decorator;import co.jp.li.concretecomponent.Person;public class Finery extends Person { protected Person person; public void Decorate(Person person) { this.person = person; } @Override public void show() { // TODO Auto-generated method stub if (person != null) { person.show(); } }}
BigTrouser.java 和Kimono.java 和TShirt.java
package co.jp.li.concretedecorator;import co.jp.li.decorator.Finery;public class BigTrouser extends Finery { @Override public void show() { // TODO Auto-generated method stub System.out.print("BigTrouser" + "\t"); super.show(); }}package co.jp.li.concretedecorator;import co.jp.li.decorator.Finery;public class Kimono extends Finery { @Override public void show() { // TODO Auto-generated method stub System.out.print("着物\t"); super.show(); }}package co.jp.li.concretedecorator;import co.jp.li.decorator.Finery;public class TShirt extends Finery { @Override public void show() { // TODO Auto-generated method stub System.out.print("TShirt" + "\t"); super.show(); }}
coursom.java 客户测试类—>
package co.jp.li.client;import co.jp.li.concretecomponent.Person;import co.jp.li.concretedecorator.BigTrouser;import co.jp.li.concretedecorator.Kimono;import co.jp.li.concretedecorator.TShirt;public class coursom { public static void main(String[] args) { // TODO Auto-generated method stub Person person = new Person("佐藤"); System.out.print("衣装は--->"); TShirt tShirt = new TShirt(); BigTrouser bigTrouser = new BigTrouser(); Kimono kimono = new Kimono(); bigTrouser.Decorate(person); tShirt.Decorate(bigTrouser); kimono.Decorate(tShirt); kimono.show(); }}
总结—
装饰模式是为已有功能动态地添加更多功能的一种方式。
使用场合—
当系统需要新功能的时候,是向旧的类中添加新的代码。这些新加的代码通常装饰了原有类的
核心职责或主要行为,在主类中加入新的字段,方法,逻辑,从而增加了主类的复杂度。
装饰模式把每个要装饰的功能放在单独的类中,并让这个类包装他所要修饰的对象,因此,当需要执行特殊行为时,客户代码可以在运行时根据需要有选择地,按顺序的使用装饰功能包装对象了。
装饰顺序很重要!!!
阅读全文
0 0
- 大话设计之装饰模式
- 大话设计模式之装饰设计模式
- 大话设计模式之-----装饰模式
- 大话设计模式之装饰模式
- 大话设计模式之装饰模式
- 大话设计模式之装饰模式
- 大话设计模式之装饰模式
- 大话设计模式之装饰者模式
- 大话设计模式之装饰器模式
- 三、大话设计模式 之 装饰模式
- 大话设计模式之装饰者模式
- 大话设计模式读后感之装饰模式
- 大话设计模式之装饰模式
- 大话设计模式之装饰模式
- 《大话设计模式》之装饰模式
- 大话设计模式-装饰模式
- 大话设计模式-装饰模式
- 大话设计模式-装饰模式
- lbrary not found for lWAP 问题解决
- Github访问速度慢-----win10下
- JSON的数据格式
- noip 2015 day2解题报告
- 两点之间往复运动 仿照itween 的pingpong运动
- 大话设计模式之装饰模式
- Spring学习(九)-AOP切面通知
- nyoj 15 括号匹配(二)
- Hadoop5-用MapReduce写流量求和
- 关于MySQL的几点安全配置
- redis4.0.1主从配置及Sentinel配置自动Failover
- Linux下的I/O复用与epoll详解
- 1670: 和费马开个玩笑
- WMF