• 设计模式笔记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系统设计就是使用了装饰者模型来设计的,可以仔细研究下。

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

  • 相关阅读:
    IntellJ IDEA javax.servlet.ServletException 找不到javax.servlet.ServletException的类 java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
    java最全的Connection is read-only. Queries leading to data modification are not allowed
    如何产出高效高质量的博客 ----------- 向阿里架构师学习心得
    写博客的优势在于-----------------心得体会
    IntelliJ IDEA 2017版 使用笔记(四) 模板 live template自定义设置;IDE快捷键使用
    Nginx中间件使用心得(三)
    Nginx中间件使用心得(二)
    一种新的操作系统设计
    linux下udev
    MMU内存管理单元
  • 原文地址:https://www.cnblogs.com/macula7/p/1960850.html
Copyright © 2020-2023  润新知