设计模式笔记3(装饰者模式)
2009-02-27 04:21
302 查看
这次笔记是对装饰者模式的学习,书中用到的例子是startbuzz店的订单系统,对于每一种产品,都需要有一个价格方法。现在面临的问题是用户的咖啡可能很复杂,同一种咖啡也可能由于用户添加新的材料而引起价格的变动,总不能把所有的可能情况都设计成类,显然这是不现实的。
考虑了集中方案后都不太合适,继续阅读。
继承和组合:继承威力强大,但是使用继承的话设计的类弹性较差,维护困难。通过组合也可以起到在运行时具有继承行为的效果。前面的内容已经介绍过。这两种方式的区别在于,继承的话子类行为在编译的时候已经决定了,而且子类会有相同的方法,而使用组合则是在运行时动态的扩展,显然它的效果会好。
设计原则:类应该对扩展开放,对修改关闭
这样能达到的目的就是类容易扩展,在不修改代码的情况下,可以搭配新的行为。
采用装饰者模型,一层层的嵌入价格来达到目的。相当于把对象作为一个容器,任何一个对象都可以放入到另一对象中,允许嵌套。
利用装饰者模式实现系统:
///最顶层的类,通过它可以可以达到类型匹配的目的,而不是由子类来继承它的行为。用接口也可以起到同样的效果
public abstract class Beverage{
String description="";
public string getDescription()
{}
public abstract double cost()
{
}
}
//装饰者类,通过它来进一步定义各个装饰者
public abstract class CondimentDecrator extends Beverage
{
public abstract String getDescription(){};
}
//实现一些饮料类
public class Espresso extends Beverage
{
public Espresso()
{
description="Espresso";
}
}
。。。。。。。。。。。
实现一些装饰者
public class Mocha extends CondimentDecorator
{
Beverage beverage;
public Mocha(Beverage beverage)//注意参数类型
{
this.beverage=beverage;
}
public String getDescription()
{
return berverage.description+"Mocha";
}
public double cost()
{
return .20+beverage.cost();
}
}
。。。。。。。。
使用的时候代码如下:
Beverage beverage =new Espresso();
beverage=new Mocha(berverage);
bererage=new Mocha(berverage);\
如果对咖啡不是很了解的话,可以这样理解,要了一杯Espresso,加了两次的Mocha
每次都放到一个杯子里,这样就把各个装饰者添加到了一块,注意代码的具体实现。
Java的io系统设计就是使用了装饰者模型来设计的,可以仔细研究下。
这次就到这里吧,比较粗糙这次,反思下,再有感悟补上吧。
考虑了集中方案后都不太合适,继续阅读。
继承和组合:继承威力强大,但是使用继承的话设计的类弹性较差,维护困难。通过组合也可以起到在运行时具有继承行为的效果。前面的内容已经介绍过。这两种方式的区别在于,继承的话子类行为在编译的时候已经决定了,而且子类会有相同的方法,而使用组合则是在运行时动态的扩展,显然它的效果会好。
设计原则:类应该对扩展开放,对修改关闭
这样能达到的目的就是类容易扩展,在不修改代码的情况下,可以搭配新的行为。
采用装饰者模型,一层层的嵌入价格来达到目的。相当于把对象作为一个容器,任何一个对象都可以放入到另一对象中,允许嵌套。
利用装饰者模式实现系统:
///最顶层的类,通过它可以可以达到类型匹配的目的,而不是由子类来继承它的行为。用接口也可以起到同样的效果
public abstract class Beverage{
String description="";
public string getDescription()
{}
public abstract double cost()
{
}
}
//装饰者类,通过它来进一步定义各个装饰者
public abstract class CondimentDecrator extends Beverage
{
public abstract String getDescription(){};
}
//实现一些饮料类
public class Espresso extends Beverage
{
public Espresso()
{
description="Espresso";
}
}
。。。。。。。。。。。
实现一些装饰者
public class Mocha extends CondimentDecorator
{
Beverage beverage;
public Mocha(Beverage beverage)//注意参数类型
{
this.beverage=beverage;
}
public String getDescription()
{
return berverage.description+"Mocha";
}
public double cost()
{
return .20+beverage.cost();
}
}
。。。。。。。。
使用的时候代码如下:
Beverage beverage =new Espresso();
beverage=new Mocha(berverage);
bererage=new Mocha(berverage);\
如果对咖啡不是很了解的话,可以这样理解,要了一杯Espresso,加了两次的Mocha
每次都放到一个杯子里,这样就把各个装饰者添加到了一块,注意代码的具体实现。
Java的io系统设计就是使用了装饰者模型来设计的,可以仔细研究下。
这次就到这里吧,比较粗糙这次,反思下,再有感悟补上吧。
相关文章推荐
- 【设计模式学习笔记】之 装饰者模式
- 【js设计模式笔记---装饰者模式】
- 设计模式笔记——装饰者模式
- 设计模式笔记之装饰者模式(Decorator Pattern)
- 【知了堂学习笔记】——设计模式之装饰者模式
- [知了堂学习笔记]设计模式之装饰者模式
- (Head First 设计模式)学习笔记(3) --装饰者模式(StarBuzz咖啡店实例)
- 《Head First 设计模式》阅读笔记(三)——装饰者模式
- 设计模式学习笔记之装饰者模式
- <JAVA学习笔记二>——设计模式之装饰者设计模式
- 设计模式笔记之九 (装饰者模式)
- 【学习笔记javascript设计模式与开发实践(装饰者模式)----15】
- 设计模式学习笔记--装饰者模式(Decorator Pattern)
- java/android 设计模式学习笔记(7)---装饰者模式
- 设计模式---装饰者模式(学习笔记)
- 设计模式学习笔记——装饰者模式
- 设计模式笔记-装饰者模式
- 学习笔记 ---- 设计模式之装饰者模式
- headfast设计模式学习笔记02 装饰者