zoukankan      html  css  js  c++  java
  • 设计模式笔记3(装饰者模式)

    这次笔记是对装饰者模式的学习,书中用到的例子是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系统设计就是使用了装饰者模型来设计的,可以仔细研究下。

    这次就到这里吧,比较粗糙这次,反思下,再有感悟补上吧。

  • 相关阅读:
    样式表中!important的用法
    ORA27101: shared memory realm does not exist问题的解决
    重置标识列的当前值
    ASP.NET Oracle数据库使用事务时注意事项
    Oracle中约束的添加方法总结
    HTML段落自动换行的样式设置
    ASP.NET应用程序中的服务器错误
    oracle中的rownum、order by与分页
    position:relative与float的区别
    Moss/Sharepoint 备份或还原时出错的处理(持续更新)
  • 原文地址:https://www.cnblogs.com/macula7/p/1960850.html
Copyright © 2011-2022 走看看