软件世界网 购物 网址 三丰软件 | 小说 美女秀 图库大全 游戏 笑话 | 下载 开发知识库 新闻 开发 图片素材
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
移动开发 架构设计 编程语言 Web前端 互联网
开发杂谈 系统运维 研发管理 数据库 云计算 Android开发资料
  软件世界网 -> 开发杂谈 -> 装饰模式 -> 正文阅读

[开发杂谈]装饰模式


设计原则:类应该对扩展开放,对修改关闭(开闭原则)。
装饰着模式:动态的将责任添加到对象上。若要扩展功能,装饰着将比继承更有弹性。
装饰着模式类图如下:
[img]http://images.cnitblog.com/blog/425275/201305/06235335-c987cf19f95543b98bee3866010bada6.png
下面是关于装饰模式的一个典型示例:来自Head First的装饰者模式Demo(星巴兹咖啡):
[img]http://common.cnblogs.com/images/copycode.gif
package com.zjut.json.decoratorPattern;

/**
 * 装饰模式抽象组件
 * 
 * @author json
 *
 * @date 2013-5-6
 */
public abstract class Beverage {
    
    private String description = "Unknown Beverage";
    
    public String getDescription(){
        return description;
    }
    
    public void setDescription(final String description){
        this.description = description;
    }
    
    public abstract double cost();

}

[img]http://common.cnblogs.com/images/copycode.gif
[img]http://common.cnblogs.com/images/copycode.gif
package com.zjut.json.decoratorPattern;

/**
 * 浓缩咖啡-具体组件
 * 
 * @author json
 *
 * @date 2013-5-6
 */
public class Espresson extends Beverage {
    
    /**
     * 增加具体咖啡描述
     */
    public Espresson(){
        setDescription("Espresson");
    }

    @Override
    public double cost() {
        return 1.99;
    }

}

[img]http://common.cnblogs.com/images/copycode.gif
[img]http://common.cnblogs.com/images/copycode.gif
package com.zjut.json.decoratorPattern;

/**
 * 具体组件
 * 
 * @author json
 *
 * @date 2013-5-6
 */
public class HouseBlend extends Beverage {

    public HouseBlend(){
        setDescription("House Blend Coffee");
    }
    
    @Override
    public double cost() {
        return .98D;
    }

}

[img]http://common.cnblogs.com/images/copycode.gif
[img]http://common.cnblogs.com/images/copycode.gif
package com.zjut.json.decoratorPattern;

/**
 * 装饰者接口
 * 
 * @author json
 *
 * @date 2013-5-6
 */
public abstract class CondimentDecorator extends Beverage {

    public abstract String getDescription();
}

[img]http://common.cnblogs.com/images/copycode.gif
[img]http://common.cnblogs.com/images/copycode.gif
package com.zjut.json.decoratorPattern;

/**
 * @author json
 *
 * @date 2013-5-6
 */
public class Mocha extends CondimentDecorator {
    
    /**被装饰着*/
    private Beverage beverage;

    @Override
    public String getDescription() {
        return beverage.getDescription() + ", Mocha";
    }

    @Override
    public double cost() {
        return beverage.cost() + .20D;
    }

    public Beverage getBeverage() {
        return beverage;
    }

    public void setBeverage(Beverage beverage) {
        this.beverage = beverage;
    }
    
}

[img]http://common.cnblogs.com/images/copycode.gif
[img]http://common.cnblogs.com/images/copycode.gif
package com.zjut.json.decoratorPattern;

/**
 * @author json
 *
 * @date 2013-5-6
 */
public class StarbuzzCoffee {

    public static void main(String[] args){
        Beverage decorated = new Espresson();
        Mocha decorator = new Mocha();
        decorator.setBeverage(decorated);
        System.out.println(decorator.cost());
        
        //双份摩卡
        Mocha doubleDecorator = new Mocha();
        doubleDecorator.setBeverage(decorator);
        System.out.println(doubleDecorator.getDescription() + ": " + doubleDecorator.cost());
    }
}

[img]http://common.cnblogs.com/images/copycode.gif
在这个例子中,装饰者和被装饰着共同继承与抽象组件Beverage,但不同之处在于,装饰者继承抽象组件的是类型,而不是行为,而行为的继承是利用组合,即在具体装饰者对象中存在了一个被装饰者的引用,将被装饰者的行为委托给这个引用。
 
人生最可贵的事情是sb似的坚持于追求……
......显示全文...
    点击查看全文


上一篇文章      下一篇文章      查看所有文章
2016-04-03 20:46:48  
开发杂谈 最新文章
BloomFilter
大学四年编程之历程
内核分析
造人论坛——意识的本质和一个人工脑模型
OFDM信号[matlab描述]
人类还会进化吗?
HDUACM1035RobotMotion简单模拟题
树、二叉树(二)
iisphpweb.config处理404,500等,跳转友好
DatabaseAsaFortress
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 美食菜谱 新闻资讯 电影视频 小游戏 Chinese Culture 股票 租车
生肖星座 三丰软件 视频 开发 短信 中国文化 网文精选 搜图网 美图 阅读网 多播 租车 短信 看图 日历 万年历 2018年1日历
2018-1-20 7:26:29
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  软件世界网 --