首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

java设计方式之——装饰模式结(构型模式)

2012-10-15 
java设计模式之——装饰模式结(构型模式)三.例子代码:使用装饰模式来演示一个对”行走”功能扩展的例子(听音乐

java设计模式之——装饰模式结(构型模式)

三.例子代码:使用装饰模式来演示一个对”行走”功能扩展的例子(听音乐+行走和唱歌+行走)1. 抽象构件package com.eekq.decorator; publicinterface Component {    /**原始接口*/    publicvoid go();}2. 具体构件package com.eekq.decorator; publicclass ConcreteComponent implements Component {     publicvoid go() {            System.out.println("行走");    } }3.装饰角色来了package com.eekq.decorator; publicclass Decorator implements Component {    /**持有私有的原始构件*/    private Component component;     /**构造子,委派给原始构件*/    protected Decorator(Component component) {        this.component = component;    }     /**调用原始构件功能,通常就可直接把扩展功能加在此方法中*/    publicvoid go() {        this.component.go();    } }4.具体装饰(这里演示了两种扩展的情况,走路+听音乐和唱歌s)(1).package com.eekq.decorator; publicclass ConcreteDecoratorListen extends Decorator {     /**构造子,相关初始化*/    public ConcreteDecoratorListen(Component component) {        super(component);        // code is here    }     /**商业逻辑,对原始构件功能的扩展*/    publicvoid go() {            listen("听音乐");//执行扩展功能        super.go();    }       privatevoid listen(Object obj){        System.out.println(obj);           } }(2).package com.eekq.decorator; publicclass ConcreteDecoratorSing extends Decorator {     /**构造子,相关初始化*/    public ConcreteDecoratorSing(Component component) {        super(component);        // code is here    }     /**商业逻辑,对原始构件功能的扩展*/    publicvoid go() {            super.go();        System.out.println(sing());;// 执行扩展功能    }     private String sing() {        return"唱歌";    }}5.客户端调用package com.eekq.decorator; publicclass Main {     publicstaticvoid main(String[] args) {        /**原始构件*/        Component component = new ConcreteComponent();        /**边听音乐,边走路*/        ConcreteDecoratorListen cdl = new ConcreteDecoratorListen(component);        cdl.go();        System.out.println();        /**边走路,边唱歌*/        ConcreteDecoratorSing cds = new ConcreteDecoratorSing(component);        cds.go();    } }四.总结优点:装饰模式和继承都是对功能的扩展,而装饰模式使用的是组合,可以不用继承而达到这一效果.使用过多的继承会增加系统的复杂性和偶合性它通过传对象的形式(构造函数传参数)达到增强的目的,而不是继承缺点:装饰模式要产生一些辅助性的对象,但这些对象看上去都比较像,不是很容易检查(好的命名应该是提高检查的一个办法)

?

?

(7).装饰模式:

文章链接:http://www.iteye.com/topic/121149

优点:装饰模式和继承都是对功能的扩展,而装饰模式使用的是组合,可以不用继承而达到这一效果.使用过多的继承会增加系统的复杂性和偶合性

它通过传对象的形式(构造函数传参数)达到增强的目的,而不是继承

缺点:装饰模式要产生一些辅助性的对象,但这些对象看上去都比较像,不是很容易检查(好的命名应该是提高检查的一个办法)

?第四个设计模式:装饰模式
装饰模式是对对象功能增强时,平时使用继承的一种替代方案
一.UML示意图:

二.组成部分:
1.?????? 抽象构件:原始的功能接口
2.?????? 具体构件:具体的原始功能类
3.?????? 装饰角色:持有具体构件类的对象,以便执行原有功能
4.?????? 具体装饰:具体扩展的功能在这里

?

热点排行