`

装饰器模式(网站借鉴的)

 
阅读更多
package com.decorator;
/**
 * 面包类
 * @author Administrator
 *
 */
public class Bread extends Ingredient {

    private String description ;

    public Bread(String desc){

              this.description=desc ;

    }

    public String getDescription(){

              return description ;

    }       

    public double getCost(){

              return 2.48 ;

    }       

}


package com.decorator;

public class Celery extends Decorator{

    public Celery(Ingredient igd){

              super(igd);

    }

    public String getDescription(){

              String base = ingredient.getDescription();

              return base +"\n"+"Decrocated with Celery !";

    }

    public double getCost(){

              double basePrice = ingredient.getCost();

              double celeryPrice =0.6;

              return      basePrice + celeryPrice ;

    }

}


package com.decorator;

public abstract class Decorator extends Ingredient {

    Ingredient ingredient ;

    public Decorator(Ingredient igd){

             this.ingredient = igd;     

    }       

    public abstract String getDescription();

    public abstract double getCost();

}


package com.decorator;

public class GreenGrocery extends Decorator{

    public GreenGrocery (Ingredient igd){

              super(igd);

    }

    public String getDescription(){

              String base = ingredient.getDescription();

              return base +"\n"+"Decrocated with GreenGrocery  !";

    }

    public double getCost(){

              double basePrice = ingredient.getCost();

              double greenGroceryPrice = 0.4;

              return        basePrice + greenGroceryPrice ;

    }

}


package com.decorator;
/**
 * 原料类 
 * @author Administrator
 *
 */
public abstract class Ingredient {

         public abstract String getDescription();

         public abstract double getCost();    

         public void printDescription(){        

                   System.out.println(" Name      "+ this.getDescription());

                   System.out.println(" Price RMB "+ this.getCost());

         }

}



package com.decorator;

public class Mutton extends Decorator{

    public Mutton(Ingredient igd){

              super(igd);

    }

    public String getDescription(){

              String base = ingredient.getDescription();

              return base +"\n"+"Decrocated with Mutton !";

    }

    public double getCost(){

              double basePrice = ingredient.getCost();

              double muttonPrice = 2.3;

              return        basePrice + muttonPrice ;

    }

}


package com.decorator;

public class Pork extends Decorator{

    public Pork(Ingredient igd){

              super(igd);

    }

    public String getDescription(){

              String base = ingredient.getDescription();

              return base +"\n"+"Decrocated with Pork !";

    }

    public double getCost(){

              double basePrice = ingredient.getCost();

              double porkPrice = 1.8;

              return        basePrice + porkPrice ;

    }

}


package com.decorator;

public class DecoratorTest {
	public static void main(String[] args)
	{
		   Ingredient compound = new Mutton(new Celery(new Bread("Master24's Bread")));              

           compound.printDescription();

          

           compound = new Celery(new GreenGrocery(new Bread("Bread with milk")));    

           compound.printDescription();

          

           compound = new Mutton(new Pork(new Bread("Bread with cheese")));

           compound.printDescription();
	}

}
分享到:
评论

相关推荐

    设计模式 含代码及讲解

    结构型模式关注如何组合和构建类与对象,如适配器模式(Adapter)、装饰器模式(Decorator)和代理模式(Proxy)。行为型模式则涉及对象之间的交互和责任分配,例如观察者模式(Observer)、策略模式(Strategy)和...

    装饰者设计模式

    装饰者模式避免了因频繁使用继承而导致的类层次复杂,使得我们可以根据需要灵活地组合装饰器,实现不同功能的叠加。 在实际开发中,装饰者模式常用于诸如日志记录、性能测试、缓存、事务管理等场景,特别是在需要对...

    设计模式之Decorator

    此外,Spring框架中的AOP(面向切面编程)也借鉴了装饰器模式的思想,通过代理类动态增强目标对象的功能。 总之,装饰器模式提供了一种优雅的方式来扩展对象功能,尤其适用于那些需要灵活扩展的场景。通过理解并...

    java方向设计模式浅析

    结构型模式则关注如何将类或对象组合成更大的结构,例如适配器模式、装饰器模式和桥接模式等,它们有助于不同组件之间的协同工作。最后,行为型模式关注对象之间的责任分配和交互,如观察者模式、模板方法模式和策略...

    设计模式书一本

    2. 结构型模式:这类模式涉及到如何组合类和对象以构建更大的结构,例如适配器模式(Adapter)、装饰器模式(Decorator)、代理模式(Proxy)、外观模式(Facade)、桥接模式(Bridge)、组合模式(Composite)和享...

    C设计模式_程序设计.rar C设计模式_程序设计.rar

    这个压缩包中可能涵盖了如单例模式、工厂模式、装饰器模式、观察者模式等经典的设计模式,这些模式在C语言的上下文中有着重要的应用价值。 电子书阅读方法.htm可能是对如何阅读和理解压缩包内电子书内容的指南,它...

    软件设计-常见的23种设计模式借鉴.pdf

    15. **解释器模式**:为特定语言定义文法规则并提供解释器,用于解析和执行该语言的表达式。包含抽象语法树的构建和解释两部分。 16. **迭代子模式**:允许客户端以一致的方式遍历集合,隐藏了集合内部的具体结构,...

    设计模式PDF

    例如,适配器模式(Adapter)用于接口兼容性问题,装饰器模式(Decorator)动态添加功能,代理模式(Proxy)提供对象的替代品,以及桥接模式(Bridge)和组合模式(Composite)等,这些都为软件设计提供了灵活的架构...

    设计模式可复用面向对象软件的基础

    2. 结构型模式(Structural Patterns):这些模式关注于如何将类和对象组合成更大的结构,比如适配器模式(Adapter)、桥接模式(Bridge)、装饰器模式(Decorator)、外观模式(Facade)、享元模式(Flyweight)、...

    《设计模式:可复用面向对象软件的基础》学习并理解 23 种设计模式

    - **装饰器模式**(Decorator):动态地给一个对象添加一些额外的责任。 - **外观模式**(Facade):为子系统中的一组接口提供一个一致的界面。 - **享元模式**(Flyweight):运用共享技术有效地支持大量细粒度...

    设计模式 c# 代码

    装饰器模式动态地给对象添加一些额外的职责,提供了一种用独立的、透明的方式扩展对象功能的方法,而不会影响到其他对象。C#中,装饰器通常通过实现与被装饰对象相同的接口来实现。 八、适配器模式(Adapter) ...

    .net 设计模式纵横谈java版

    5. **装饰器模式(Decorator)**:装饰器模式可以为对象添加新的功能,而不会改变其原有的结构。在Struts2中,FilterDispatcher和FrontController都是装饰器模式的应用,它们负责调度请求,增强核心控制器的功能。 ...

    Delphi模式编程

    4. **装饰器模式**:动态地给一个对象添加一些额外的职责,增加功能而不影响其原有结构。在Delphi中,可以利用继承和组合来实现,通过包装对象来扩展其行为。 5. **策略模式**:定义一系列算法,并将每一个算法封装...

    面向模式的软件体系结构

    3. **设计模式**:设计模式专注于软件组件之间的交互和结构,例如工厂模式、观察者模式、装饰器模式等。这些模式解决了软件设计中常见的问题,如对象创建、状态管理、行为组合等。 4. **实现与应用**:在实际项目中...

    模式编程,改变程序员的人生

    2. 结构型模式:如适配器模式、装饰器模式、代理模式等,关注如何组合类和对象,以实现更灵活的结构。 3. 行为型模式:如策略模式、观察者模式、职责链模式等,关注对象之间的交互和行为分配。 三、模式编程的价值 ...

    软件模式的现状-论文.zip

    然而,随着函数式编程的兴起,一些模式如策略模式、装饰器模式等在函数式编程中找到了新的实现方式,这使得软件模式的边界更加模糊,同时也带来了更丰富的设计可能性。 其次,云计算和微服务架构的普及,也对软件...

    DPModel设计模式之禅.源码

    装饰器模式可能用于在运行时动态添加或修改对象的功能;代理模式可能用于控制对真实对象的访问,提供额外的功能如缓存、日志记录等。 3. 行为型模式:观察者模式可能用于实现事件驱动,当对象状态改变时通知其他...

    设计模式教程(design pattern)

    3. **行为型模式**:关注类的职责分配,包括策略模式、模板方法模式、观察者模式、命令模式、迭代器模式、访问者模式、中介者模式、备忘录模式、状态模式、解释器模式。 #### 六、GoV设计模式 GoV设计模式是指在...

Global site tag (gtag.js) - Google Analytics