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)和...
装饰者模式避免了因频繁使用继承而导致的类层次复杂,使得我们可以根据需要灵活地组合装饰器,实现不同功能的叠加。 在实际开发中,装饰者模式常用于诸如日志记录、性能测试、缓存、事务管理等场景,特别是在需要对...
此外,Spring框架中的AOP(面向切面编程)也借鉴了装饰器模式的思想,通过代理类动态增强目标对象的功能。 总之,装饰器模式提供了一种优雅的方式来扩展对象功能,尤其适用于那些需要灵活扩展的场景。通过理解并...
结构型模式则关注如何将类或对象组合成更大的结构,例如适配器模式、装饰器模式和桥接模式等,它们有助于不同组件之间的协同工作。最后,行为型模式关注对象之间的责任分配和交互,如观察者模式、模板方法模式和策略...
它可能包含了对多种设计模式的详尽解析和实例应用,其中可能涵盖了单例模式、工厂模式、装饰器模式、观察者模式等经典的设计模式。这些模式在C语言的编程实践中有着不可忽视的应用价值。比如,单例模式用于确保一个...
2. 结构型模式:这类模式涉及到如何组合类和对象以构建更大的结构,例如适配器模式(Adapter)、装饰器模式(Decorator)、代理模式(Proxy)、外观模式(Facade)、桥接模式(Bridge)、组合模式(Composite)和享...
装饰器模式为对象添加新功能,同时又不改变其结构;代理模式则在不改变原始对象的情况下,为对象提供代理或占位符;桥接模式则是将抽象部分与其实现部分分离,使得它们都可以独立地变化。这些模式都是在类和对象的...
15. **解释器模式**:为特定语言定义文法规则并提供解释器,用于解析和执行该语言的表达式。包含抽象语法树的构建和解释两部分。 16. **迭代子模式**:允许客户端以一致的方式遍历集合,隐藏了集合内部的具体结构,...
例如,适配器模式(Adapter)用于接口兼容性问题,装饰器模式(Decorator)动态添加功能,代理模式(Proxy)提供对象的替代品,以及桥接模式(Bridge)和组合模式(Composite)等,这些都为软件设计提供了灵活的架构...
2. 结构型模式(Structural Patterns):这些模式关注于如何将类和对象组合成更大的结构,比如适配器模式(Adapter)、桥接模式(Bridge)、装饰器模式(Decorator)、外观模式(Facade)、享元模式(Flyweight)、...
- **装饰器模式**(Decorator):动态地给一个对象添加一些额外的责任。 - **外观模式**(Facade):为子系统中的一组接口提供一个一致的界面。 - **享元模式**(Flyweight):运用共享技术有效地支持大量细粒度...
装饰器模式动态地给对象添加一些额外的职责,提供了一种用独立的、透明的方式扩展对象功能的方法,而不会影响到其他对象。C#中,装饰器通常通过实现与被装饰对象相同的接口来实现。 八、适配器模式(Adapter) ...
5. **装饰器模式(Decorator)**:装饰器模式可以为对象添加新的功能,而不会改变其原有的结构。在Struts2中,FilterDispatcher和FrontController都是装饰器模式的应用,它们负责调度请求,增强核心控制器的功能。 ...
4. **装饰器模式**:动态地给一个对象添加一些额外的职责,增加功能而不影响其原有结构。在Delphi中,可以利用继承和组合来实现,通过包装对象来扩展其行为。 5. **策略模式**:定义一系列算法,并将每一个算法封装...
3. **设计模式**:设计模式专注于软件组件之间的交互和结构,例如工厂模式、观察者模式、装饰器模式等。这些模式解决了软件设计中常见的问题,如对象创建、状态管理、行为组合等。 4. **实现与应用**:在实际项目中...
2. 结构型模式:如适配器模式、装饰器模式、代理模式等,关注如何组合类和对象,以实现更灵活的结构。 3. 行为型模式:如策略模式、观察者模式、职责链模式等,关注对象之间的交互和行为分配。 三、模式编程的价值 ...
然而,随着函数式编程的兴起,一些模式如策略模式、装饰器模式等在函数式编程中找到了新的实现方式,这使得软件模式的边界更加模糊,同时也带来了更丰富的设计可能性。 其次,云计算和微服务架构的普及,也对软件...
装饰器模式可能用于在运行时动态添加或修改对象的功能;代理模式可能用于控制对真实对象的访问,提供额外的功能如缓存、日志记录等。 3. 行为型模式:观察者模式可能用于实现事件驱动,当对象状态改变时通知其他...