四、装饰模式
来源:互联网 发布:evdo是什么网络 编辑:程序博客网 时间:2024/06/05 06:08
所谓装饰,就是在原有物件上增加新的“零件”,使其拥有新的功能。打个比方,就像一个原本裸装的初级剑客,装备了宝剑、坐骑、铠甲等装备之后,战斗力暴增,完成从原来的5剑砍死一头家养猪到一剑秒杀巨龙的华丽转身。
装饰模式是为已有功能动态的添加更多功能的一种方式。它把每个要装饰的功能放到单独的类中,并让这个类包装它所要装饰的对象,当系统需要执行特殊行为时,客户就可有选择的、按顺序的使用装饰功能包装对象了。 --摘自《大话设计模式》
基本结构如下:
①、原型,核心代码(裸装剑客)
方法甲:需要被扩展的方法
②、装饰抽象类,装饰的超类,继承“原型”对其扩展(装备)
原型的引用ob
装饰方法:为“原型的引用”初始化的方法
方法乙:要覆写原型方法(调用“ob”的方法甲)
③、各种装饰类,继承装饰抽象类(宝剑、坐骑、铠甲等)
覆写“装饰抽象类”里的方法乙,加入各自的实现
④、调用者
new出初级裸装剑客
new出装备1,装备2……
用装备1装饰剑客,用装备2装饰“已佩戴装备1的剑客”……(/*装饰方法*/调用)
装备完全的剑客,调用最终版本的方法乙
示例代码:模拟给人物上装备
①、原型#########################################
/** *原型 */public class Person {private String figure;//人物public Person(){};public Person(String figure){this.figure = figure;}//展示方法public void show(){System.out.print("\t装备的"+figure);}}
②、装饰抽象类#########################################
/** *装饰抽象类,装备的超类 */public abstract class Equipment extends Person {private Person person; //Person的引用//装饰方法,为传入的target增加装备public void decorate(Person target){this.person = target;}@Overridepublic void show() {if(person!=null){person.show();}}}
③、各种装饰类#########################################
/** *装备一,宝剑 */public class Sword extends Equipment {@Overridepublic void show() {System.out.print("\t轩辕剑");super.show();}}
/** *装备二、铠甲 */public class Armour extends Equipment {@Overridepublic void show() {System.out.print("\t玄武战甲");super.show();}}
/** *装备三、坐骑 */public class Horse extends Equipment {@Overridepublic void show() {System.out.print("\t饕餮");super.show();}}
④、调用者#########################################
public class Test {public static void main(String[] args) throws Exception {Person person = new Person("剑客"); //人物原型Sword sword = new Sword(); //准备宝剑Armour armour = new Armour(); //准备铠甲Horse horse = new Horse();//准备坐骑sword.decorate(person); //给“剑客”装备宝剑armour.decorate(sword); //给“佩戴宝剑的剑客”装备铠甲horse.decorate(armour); //给“身着铠甲佩戴宝剑的剑客”装备坐骑System.out.println("人物展示:");horse.show(); //展示方法}}
- 四、装饰模式
- 设计模式(四)[装饰(Decorator)模式]
- 大话设计模式(四)装饰模式
- iOS与设计模式四:装饰模式
- 设计模式(四)装饰模式
- 扩展系统功能——装饰模式(四):透明与半透明装饰模式,装饰模式注意事项,装饰模式总结
- 设计模式中结构型模式(四)装饰模式(Decorator)
- 设计模式系列之四:装饰者模式(Decorator Pattern)
- 设计模式笔记(四) —— 装饰模式
- 设计模式之四——装饰模式
- 大话设计模式学习(四)——装饰模式
- 设计模式四(装饰模式,采用python 实现)
- 装饰模式——结构型设计模式之四
- 设计模式学习(四)——装饰者模式
- 设计模式实践(四)装饰模式(decorator)
- 结构型模式之四——装饰模式
- 设计模式系列(四)——装饰模式
- 设计模式系列之四装饰者模式
- dm642的中断定时器
- jar命令的使用
- 从什么渠道获取网民的上网特征?
- hdu 4714 Tree2cycle树上乱搞
- 【安博培训笔记】Oracle2 基本SQL查询 作业20130909
- 四、装饰模式
- jQuery-easyui datagrid清空数据和去除表头
- CTabCtrl用法
- spinner获取值的方法
- java读取大文件
- RHEL/CENTOS 性能优化
- 正则表达式
- 项目组J2ee程序员的标志,你中招没 转载+评论
- iostat和iowait详细解说