`

Head First装饰者模式

阅读更多
<meta content="text/html; charset=utf-8" http-equiv="Content-Type"><meta name="ProgId" content="Word.Document"><meta name="Generator" content="Microsoft Word 11"><meta name="Originator" content="Microsoft Word 11"><link href="file:///C:%5CDOCUME%7E1%5Czhq426%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml" rel="File-List"><style> </style>

装饰者模式:<o:p></o:p>

       动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。

开放关闭原则:

       类应该对扩展开放,对修改关闭。


  1. /*
  2.  * Beverage is a abstract class.
  3.  * 相当一个组件(component),每个组件可以单独使用,也可以被其他装饰者包起来使用。
  4.  */
  5. public abstract class Beverage {
  6.     String description="Unknow Beverage";
  7.     
  8.     public String getDestription(){ //this method() has implememt here,but it's subclass must implement.
  9.         return description;
  10.     }
  11.     public abstract double cost();
  12.     
  13. }
  14. /**
  15.  * @author zhq426
  16.  *装饰者,每一个装饰者都有”一个“(包装)组件,也就是说,装饰者有一个
  17.  *实例变量以保存某个componet的引用。
  18.  *这是装饰者共同实现的接口,也是抽象类。
  19.  */
  20. public abstract class CondimentDecorator extends Beverage {
  21.     /* (non-Javadoc)
  22.      * @see org.zhq.Beverage#getDestription()
  23.      */
  24.     @Override
  25.     public abstract String getDestription() ;
  26.     
  27. }
  28. /**
  29.  * @author zhq426
  30.  *
  31.  */
  32. public class Espresso extends Beverage {
  33.     /* (non-Javadoc)
  34.      * @see org.zhq.Beverage#cost()
  35.      */
  36.     @Override
  37.     public double cost() {
  38.         // TODO Auto-generated method stub
  39.         return 1.99;
  40.     }
  41.     /**
  42.      * 
  43.      */
  44.     public Espresso() {
  45.         // TODO Auto-generated constructor stub
  46.         description="Espresso";
  47.     }
  48. }
  49. /**
  50.  * @author zhq426
  51.  *具体组件。
  52.  */
  53. public class HouseBlend extends Beverage {
  54.     /**
  55.      * 
  56.      */
  57.     public HouseBlend() {
  58.         // TODO Auto-generated constructor stub
  59.         description="House Blend Coffee";
  60.     }
  61.     /* (non-Javadoc)
  62.      * @see org.zhq.Beverage#cost()
  63.      */
  64.     @Override
  65.     
  66.     public double cost() {
  67.         // TODO Auto-generated method stub
  68.         return 0.89;
  69.     }
  70. }
  71. /**
  72.  * @author zhq426
  73.  *
  74.  */
  75. public class DarkRoast extends Beverage {
  76.     /**
  77.      * 
  78.      */
  79.     public DarkRoast() {
  80.         // TODO Auto-generated constructor stub
  81.         description="DarkRoast Coffee";
  82.     }
  83.     /* (non-Javadoc)
  84.      * @see org.zhq.Beverage#cost()
  85.      */
  86.     @Override
  87.     public double cost() {
  88.         // TODO Auto-generated method stub
  89.         return 3.2;
  90.     }
  91. }
  92. /**
  93.  * @author zhq426
  94.  *
  95.  */
  96. public class Decat extends Beverage {
  97.     /**
  98.      * 
  99.      */
  100.     public Decat() {
  101.         // TODO Auto-generated constructor stub
  102.         description="Decat Coffee";
  103.         
  104.     }
  105.     /* (non-Javadoc)
  106.      * @see org.zhq.Beverage#cost()
  107.      */
  108.     @Override
  109.     public double cost() {
  110.         // TODO Auto-generated method stub
  111.         return 0.25;
  112.     }
  113. }
  114. /**
  115.  * @author zhq426
  116.  *
  117.  */
  118. public class Mocha extends CondimentDecorator {
  119.     Beverage beverage;
  120.     /**
  121.      * 
  122.      */
  123.     public Mocha(Beverage beverage) {
  124.         // TODO Auto-generated constructor stub
  125.         this.beverage=beverage;
  126.     }
  127.     /* (non-Javadoc)
  128.      * @see org.zhq.CondimentDecorator#getDestription()
  129.      */
  130.     @Override
  131.     public String getDestription() {
  132.         // TODO Auto-generated method stub
  133.         return beverage.getDestription()+",Mocha";
  134.     }
  135.     /* (non-Javadoc)
  136.      * @see org.zhq.Beverage#cost()
  137.      */
  138.     @Override
  139.     public double cost() {
  140.         // TODO Auto-generated method stub
  141.         return 0.20+beverage.cost();
  142.     }
  143. }
  144. /**
  145.  * @author zhq426
  146.  *
  147.  */
  148. public class Soy extends CondimentDecorator {
  149.     Beverage beverage;
  150.     
  151.     public Soy(Beverage beverage){
  152.         this.beverage=beverage;
  153.     }
  154.     /* (non-Javadoc)
  155.      * @see org.zhq.CondimentDecorator#getDestription()
  156.      */
  157.     @Override
  158.     public String getDestription() {
  159.         // TODO Auto-generated method stub
  160.         return beverage.getDestription()+",Soy";
  161.     }
  162.     /* (non-Javadoc)
  163.      * @see org.zhq.Beverage#cost()
  164.      */
  165.     @Override
  166.     public double cost() {
  167.         // TODO Auto-generated method stub
  168.         return 0.3+beverage.cost();
  169.     }
  170. }
  171. /**
  172.  * @author zhq426
  173.  *
  174.  */
  175. public class Whip extends CondimentDecorator {
  176.     Beverage beverage;
  177.     public Whip(Beverage beverage){
  178.         this.beverage=beverage;
  179.     }
  180.     /* (non-Javadoc)
  181.      * @see org.zhq.CondimentDecorator#getDestription()
  182.      */
  183.     @Override
  184.     public String getDestription() {
  185.         // TODO Auto-generated method stub
  186.         return beverage.getDestription()+",Whip";
  187.     }
  188.     /* (non-Javadoc)
  189.      * @see org.zhq.Beverage#cost()
  190.      */
  191.     @Override
  192.     public double cost() {
  193.         // TODO Auto-generated method stub
  194.         return 0.5+beverage.cost();
  195.     }
  196. }
  197. /**
  198.  * @author zhq426
  199.  *
  200.  */
  201. public class StarbuzzCoffee {
  202.     /**
  203.      * @param args
  204.      */
  205.     public static void main(String[] args) {
  206.         // TODO Auto-generated method stub
  207.         Beverage beverage=new Espresso();
  208.         System.out.println(beverage.getDestription()
  209.                 +"$"+beverage.cost());
  210.         Beverage beverage2=new DarkRoast();
  211.         beverage2=new Mocha(beverage2);
  212.         beverage2=new Mocha(beverage2);
  213.         beverage2=new Whip(beverage2);
  214.         System.out.println(beverage2.getDestription()
  215.                 +"$"+beverage2.cost());
  216.         Beverage beverage3=new HouseBlend();
  217.         beverage3=new Soy(beverage3);
  218.         beverage3 =new Mocha(beverage3);
  219.         beverage3= new Whip(beverage3);
  220.         System.out.println(beverage3.getDestription()
  221.                 +"$"+beverage3.cost());
  222.         
  223.     }
  224. }

分享到:
评论

相关推荐

    [结构型模式] head first 设计模式之装饰者模式(decorator)

    在Head First设计模式这本书中,作者用易懂的方式解释了装饰者模式。书中的例子通常围绕咖啡和它的各种配料展开,例如,基础咖啡(BasicCoffee)可以被糖(Sugar)或奶油(Cream)装饰,从而变成加糖咖啡或奶油咖啡...

    Headfirst(三)装饰者模式C++实现

    总结来说,Headfirst第三章关于装饰者模式的讲解深入浅出,通过C++实现和UML类图,帮助我们理解如何在实际项目中应用这一模式,以实现灵活且易于扩展的代码结构。学习并熟练掌握装饰者模式,将极大地提升我们设计和...

    Head First 设计模式 (三) 装饰者模式(decorator pattern) C++实现

    在Head First的设计模式系列书籍中,第三部分详细介绍了装饰者模式的原理和应用。该模式的核心思想是定义一个抽象组件接口(Component),以及实现了这个接口的类(ConcreteComponent)。然后创建一系列装饰者类...

    Head First 设计模式 +Java设计模式(第2版)

    《Head First 设计模式》与《Java设计模式(第2版)》是两本非常重要的IT书籍,专注于软件开发中的设计模式。设计模式是解决软件设计中常见问题的经验总结,它们提供了一种标准的方法来处理特定场景下的问题,使得代码...

    Head First设计模式(完整高清版).pdf

    - 装饰模式:动态地给一个对象添加一些额外的职责,装饰者和被装饰对象有相同的接口。 - 享元模式:运用共享技术有效地支持大量细粒度的对象。 4. **行为型设计模式** - 责任链模式:避免将处理逻辑硬编码在一个...

    HeadFirst 设计模式学习笔记3--装饰模式 Demo

    在“HeadFirst 设计模式学习笔记3--装饰模式 Demo”中,作者通过实例讲解了装饰模式的基本概念、结构和应用场景。这篇文章可能是从CSDN博客平台上的一个链接访问的,遗憾的是,由于我们当前无法直接访问该链接,所以...

    Headfirst设计模式中文高清PDF+附书源码

    《Headfirst设计模式》是一本深受开发者欢迎的设计模式学习书籍,尤其对于初学者而言,其独特的教学方式使得复杂的概念变得易于理解。这本书以其高清的中文版PDF格式提供,结合书中源码,为读者提供了深入实践的可能...

    [中文]Head-First设计模式.pdf

    《Head-First设计模式》是一本面向初学者的优秀设计模式教程,主要针对Java编程语言。这本书通过易于理解的方式介绍了23种经典的GoF设计模式,帮助开发者提升代码的可复用性和可维护性。设计模式是软件工程中的重要...

    Head First设计模式中文版PDF完整版.rar

    重视大脑的学习指南Head First设计模式,学习为何朋友们对工厂模式的认知可能有错,把事关紧要的模式直接装入脑海里,发掘模式大师的秘密,避免一些尴尬的错误,探究星巴兹咖啡如何以装饰者模式让自己的股价翻倍。

    《Head.First设计模式》书中源代码(Java语言)

    《HeadFirst设计模式》是设计模式领域的一本经典著作,以其独特的教学方式和生动的插图深受初学者喜爱。这本书通过实例和互动式的学习方法,深入浅出地讲解了23种经典的设计模式。源代码作为理论知识的实践部分,...

    HeadFirst设计模式PPT

    《HeadFirst设计模式》是一本深受开发者欢迎的书籍,它以独特、易理解的方式介绍了软件设计中的重要概念——设计模式。设计模式是经验丰富的开发者在解决常见问题时总结出的最佳实践,它们为软件设计提供了可复用的...

    Head First设计模式和HeadFirst in java 源码以及23种设计模式关系图

    总的来说,这个压缩包包含的资源可以帮助你深入理解设计模式,通过《HeadFirst设计模式》和《HeadFirst in Java》的源码,你可以学习到如何在实际项目中应用这些模式。而UML类图则提供了直观的视角,便于你把握设计...

    Head First Design Patterns 英文版 Head First设计模式

    行为型模式如策略(Strategy)、观察者(Observer)、装饰器(Decorator)和模板方法(Template Method)等,则关注对象间的行为协作。 每章结束时,书中还包含了要点整理和习题,帮助读者复习和巩固知识点。通过...

    head first java 设计模式源代码

    《Head First Java设计模式源代码》是一本专为初学者设计的编程书籍,它通过直观易懂的方式介绍了Java编程中的设计模式。设计模式是软件工程中的一种最佳实践,是解决常见问题的经验总结,旨在提高代码的可重用性、...

    Head First 之装饰模式源代码

    Head First 之 装饰模式 源代码

    Head.First设计模式_PDF

    总的来说,《Head First设计模式》是一本非常适合初学者和有经验的开发者深入理解设计模式的书籍,它不仅提供了丰富的理论知识,还通过实践案例帮助读者将理论转化为实际技能。对于想要提升自己软件设计能力的程序员...

    Head First 设计模式 源代码

    《Head First 设计模式》是一本非常受欢迎的软件设计书籍,它以易懂且生动的方式介绍了23种经典的GOF设计模式。这本书的源代码包含了书中所有示例的实现,对于学习和理解设计模式有着极大的帮助。源代码的下载使得...

    headfirst设计模式

    装饰模式则允许在运行时动态地给对象添加新的行为或属性,而不会破坏其原有结构。 同时,书中也强调了面向对象设计的原则,如单一职责原则(SRP)、开闭原则(OCP)、里氏替换原则(LSP)、依赖倒置原则(DIP)和...

Global site tag (gtag.js) - Google Analytics