装饰模式

简单理解:

        普通咖啡加以包装(加奶或者其他什么)成为卡布奇诺咖啡或者摩卡咖啡

代码理解:

        实现了同一个接口或者继承同一个父类的对象对另一个接口实现对象或者子类包装加工

接口:

package com.whereta.decorator;

/**
 * Vincent 创建于 2016/4/23.
 * 咖啡接口
 */
public interface ICoffee {

    String getName();

    float getPrice();

}

普通咖啡:

package com.whereta.decorator;

/**
 * Vincent 创建于 2016/4/23.
 * 普通咖啡
 */
public class Coffee implements ICoffee {

    private String name = "咖啡";

    private float price = 20.0f;

    public String getName() {
        return name;
    }

    public float getPrice() {
        return price;
    }
}

卡布奇诺咖啡:

package com.whereta.decorator;

/**
 * Vincent 创建于 2016/4/23.
 * 装饰类--卡布奇诺咖啡
 */
public class CappuccinoCoffee implements ICoffee {

    private ICoffee beverage;

    public CappuccinoCoffee(ICoffee beverage) {
        this.beverage = beverage;
    }

    public String getName() {
        return "卡布奇诺"+beverage.getName();
    }

    public float getPrice() {
        return 5+beverage.getPrice();
    }
}

测试:

package com.whereta.decorator;

/**
 * Vincent 创建于 2016/4/23.
 */
public class Main {
    public static void main(String[] args) {

        ICoffee coffee=new Coffee();
        ICoffee cappuccinoCoffee=new CappuccinoCoffee(coffee);
        String name = cappuccinoCoffee.getName();
        float price = cappuccinoCoffee.getPrice();
        System.out.println("name="+name);
        System.out.println("price="+price);

    }
}

输出:

name=卡布奇诺咖啡
price=25.0

jdk代码中最常见的就是IO流中:

DataOutputStream dataOutputStream=new DataOutputStream(new BufferedOutputStream(new FileOutputStream("/usr/test.txt")));

以上代码就是使用到装饰模式

在DataOutputStream里:

public DataOutputStream(OutputStream out) {
    super(out);
}
public synchronized void write(byte b[], int off, int len)
    throws IOException
{
    out.write(b, off, len);
    incCount(len);
}


个人博客:http://www.whereta.com

转载于:https://my.oschina.net/vincentzhao/blog/664797

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值