您的位置:首页 > 编程语言 > Java开发

装饰器模式 java 414

2015-08-21 21:54 525 查看
混型与装饰者模式有些相近的感觉。

装饰者模式使用分层对象来动态的向某个对象中添加责任。自我理解是,先定义一个公共的类,这个类有其他类所有的基本方法。官方说法是,装饰器指定包装在最初的对象周围的所有对象都具有相同的基本接口,某些食物时刻装饰的,可以通过将其他类包装在这个可装饰对象的四周,来将功能分层。所以,对装饰器的使用是透明的,无论对象是否被装饰,你都拥有一个可以想对象发送的公共消息集,然后装饰类也可以添加新方法,但是这是受限的。

装饰器是通过组合和形式化结构来实现的,混形式基于继承的。可以将基于参数化的混型当做是一种反省装饰器机制,这种机制不需要装饰器设计模式的继承结构。

package test;

class Coffee {
private double price;

public double getPrice() {
return price;
}

public void setPrice(double price) {
this.price = price;
}

@Override
public String toString() {
return "Initial Coffee [price=" + price + "]";
}

}

class MilkCoffee extends Coffee {
private Coffee coffee;

public MilkCoffee(Coffee coffee) {
// TODO Auto-generated constructor stub
this.coffee = coffee;
}

public double getPrice() {
return coffee.getPrice();
}

public void setPrice(double price) {
coffee.setPrice(price);
}

}

class BubbleCoffee extends MilkCoffee {
private String bubble;

public BubbleCoffee(Coffee coffee) {
super(coffee);
bubble = "泡沫";
}
public String getBubble() {
return bubble;
}

}

class SugerCoffee extends MilkCoffee {
private String suger = "焦糖";

public SugerCoffee(Coffee coffee) {
super(coffee);
// TODO Auto-generated constructor stub
}
public String getSuger() {
return suger;
}

}

public class Main {
public static void main(String[] args) {
BubbleCoffee mc = new BubbleCoffee(new Coffee());
BubbleCoffee bc = new BubbleCoffee(new SugerCoffee(new Coffee()));
SugerCoffee sc = new SugerCoffee(new Coffee());
SugerCoffee sc1 = new SugerCoffee(new BubbleCoffee(new Coffee()));
//sc1.getBubble(); 错误,因为尽管可以添加多个层,但是只有最后一层才是实际的类型,因此只有最后一层的方法是可视的。
//此处即是说,虽然将BubbleCoffee套在了SugerCoffee里面,但是其实是不能调用他的方法的,只能调用BubbleCoffee的方法。
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: