装饰模式和代理模式的区别: 其实在写法上面试一样的
但是装饰器模式是为程序添加新的功能,而代理模式是为了是否调用那个主功能把关的。
[code]
//装饰模式动态地给一个对象添加一些额外的职责,既然只是装饰,比如一头猪,它打扮得再漂亮也是一头猪,并不能成为一个人,而装饰他的东西呢,如果一个东西要装饰他,比如给猪穿衣服,那么要点1:让他还是一头猪,所以把它包装后对外的接口还是一样的。要点2:是他变成一头美丽的猪,在包装的内部增强他的功能
//装饰与代理不一样,代理可以伪装一个对象,目的是使得别人看他看起来简单,而装饰是增强一个对象,让别人看他看起来功能变多了(提供吸引女孩的功能---给猪穿好看的衣服)
语义:使得对象组合在一起,随意组合,防止类爆炸,因为为了可以任意组合,那么他们都得是同一种东西,如果不同可能要写很多构造函数。。。用head first 的话是: 不改变接口,但加入职责
//Beverage ----> 饮料
public abstract class Beverage{
String description = "Unknown Beverage";
public String getDescription(){
return description;
}
public abstract double cost();
}
//CondimentDecorator --->调料装饰器
public abstract class CondimentDecorator extends Beverage{
public abstract String getDescription(); //强迫其他原料类重写他
}
public class Mocha extends CondimentDecorator {
Beverage beverage;
public Mocha(Beverage beverage){
this.beverage = beverage;
}
public String getDescription(){
return beverage.getDescription()+", Mocha";
}
public double cost(){
return .20 + beverage.cost();
}
}
java中的装饰器:
InputStream
FileImputStream StringBufferInputStream ByteArrayInputStream FilterInputStream
......装饰者模式的缺点。。。。小类太多,可能会造成使用此API的程序员的困扰
[/code]
但是装饰器模式是为程序添加新的功能,而代理模式是为了是否调用那个主功能把关的。
[code]
//装饰模式动态地给一个对象添加一些额外的职责,既然只是装饰,比如一头猪,它打扮得再漂亮也是一头猪,并不能成为一个人,而装饰他的东西呢,如果一个东西要装饰他,比如给猪穿衣服,那么要点1:让他还是一头猪,所以把它包装后对外的接口还是一样的。要点2:是他变成一头美丽的猪,在包装的内部增强他的功能
//装饰与代理不一样,代理可以伪装一个对象,目的是使得别人看他看起来简单,而装饰是增强一个对象,让别人看他看起来功能变多了(提供吸引女孩的功能---给猪穿好看的衣服)
语义:使得对象组合在一起,随意组合,防止类爆炸,因为为了可以任意组合,那么他们都得是同一种东西,如果不同可能要写很多构造函数。。。用head first 的话是: 不改变接口,但加入职责
//Beverage ----> 饮料
public abstract class Beverage{
String description = "Unknown Beverage";
public String getDescription(){
return description;
}
public abstract double cost();
}
//CondimentDecorator --->调料装饰器
public abstract class CondimentDecorator extends Beverage{
public abstract String getDescription(); //强迫其他原料类重写他
}
public class Mocha extends CondimentDecorator {
Beverage beverage;
public Mocha(Beverage beverage){
this.beverage = beverage;
}
public String getDescription(){
return beverage.getDescription()+", Mocha";
}
public double cost(){
return .20 + beverage.cost();
}
}
java中的装饰器:
InputStream
FileImputStream StringBufferInputStream ByteArrayInputStream FilterInputStream
......装饰者模式的缺点。。。。小类太多,可能会造成使用此API的程序员的困扰
[/code]