装饰者模式(Decorator Pattern)
来源:互联网 发布:阿里云香港主机速度慢 编辑:程序博客网 时间:2024/06/08 18:21
- 设计原则
1、封装变化 2、多用组合,少用继承
3、针对接口编程,不针对现实编程
4、为交互对象之间的松耦设计而努力
5、对扩展开放,对修改关闭
- 装饰者模式
装饰者模式 —— 动态将责任附加到对象上。想要扩展功能,装饰者提供有别于继承的另一种选择。代码实现
/** * Component类 * 抽象类 * @author WangChunhe * */public abstract class Beverage { String description = "Unknown Beverage" ; public String getDescription() { return description ; } /** * 抽象方法 * @return */ public abstract double cost(); }/** * Decorator类 * 抽象类 * @author WangChunhe * */public abstract class CondimentDecoator extends Beverage { @Override public double cost() { // TODO Auto-generated method stub return 0; } /** * 所有的调料装饰者都必须重新实现getDescription()方法 */ public abstract String getDescription();}/** * 具体组件 * @author WangChunhe * */public class HouseBlend extends Beverage { public HouseBlend() { //description 实例变量继承自Beverage description = "HouseBlend Coffee" ; } @Override public double cost() { // TODO Auto-generated method stub return 0.89; }}/** * 具体组件 * @author WangChunhe * */public class DarkRoast extends Beverage { public DarkRoast () { description = "DarkRoast " ; } @Override public double cost() { // TODO Auto-generated method stub return 0.99; }}/** * 具体组件 * @author WangChunhe * */public class Espresso extends Beverage { public Espresso() { //description实例变量继承来自Beverage description = "Espreeso" ; } @Override public double cost() { // TODO Auto-generated method stub return 1.99; } }/** * 具体装饰者 * @author WangChunhe * */public class Mocha extends CondimentDecoator { Beverage beverage; /** * * @param beverage 作为被装饰者 */ public Mocha (Beverage beverage) { this.beverage = beverage; } @Override public String getDescription() { // TODO Auto-generated method stub return beverage .getDescription() + ", Mocha"; } @Override public double cost() { // TODO Auto-generated method stub return 0.20 + beverage .cost(); }}/** * 具体装饰者 * @author WangChunhe * */public class Soy extends CondimentDecoator { Beverage beverage; public Soy (Beverage beverage) { this.beverage = beverage; } @Override public String getDescription() { // TODO Auto-generated method stub return beverage .getDescription() +" , Soy "; } @Override public double cost() { // TODO Auto-generated method stub return 0.15 + beverage .cost(); }}/** * 具体装饰者 * @author WangChunhe * */public class Whip extends CondimentDecoator { Beverage beverage; public Whip (Beverage beverage) { this.beverage = beverage; } @Override public String getDescription() { // TODO Auto-generated method stub return beverage .getDescription() + ", Whip"; } @Override public double cost() { // TODO Auto-generated method stub return 0.10 + beverage .cost(); }}/** * 测试类 * @author WangChunhe * */public class StarbuzzCoffee { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Beverage beverage = new Espresso(); System. out.println(beverage.getDescription() + " $ " + beverage.cost()); Beverage beverage2 = new DarkRoast(); beverage2 = new Mocha(beverage2); beverage2 = new Mocha(beverage2); beverage2 = new Whip(beverage2); System. out.println(beverage2.getDescription() + " $ " + beverage2.cost()); Beverage beverage3 = new HouseBlend(); beverage3 = new Soy(beverage3); beverage3 = new Mocha(beverage3); beverage3 = new Whip(beverage3); System. out.println(beverage3.getDescription() + " $ " + beverage3.cost()); }}测试结果
0 0
- 装饰者模式(the Decorator Pattern)
- 装饰者模式(Decorator Pattern)
- 装饰者模式(Decorator Pattern)
- 装饰者模式(Decorator Pattern)
- 装饰者模式(Decorator Pattern)
- Decorator Pattern 装饰者模式(二)
- 装饰者模式(Decorator Pattern)
- 装饰者模式(Decorator Pattern)
- 装饰者模式(Decorator Pattern)
- 装饰者模式(Decorator Pattern)
- 3.装饰者模式(Decorator Pattern)
- 装饰者模式(Decorator Pattern)
- Decorator Pattern (装饰者模式)
- 装饰者模式(Decorator Pattern)
- 装饰者模式(decorator pattern)
- 装饰者模式(Decorator Pattern)
- 装饰者模式(Decorator Pattern)
- Decorator Pattern 装饰者模式
- c语言总结
- putty或xshell上用vi/vim小键盘无法使用的解决方法
- java : jdbc PreparedStatement
- UINavigationController
- 关于最近的招聘
- 装饰者模式(Decorator Pattern)
- quartz任务调度
- netty开发之tcp粘包拆包问题
- android 您的手机上未安装应用程序,个别手机失败
- 项目总结-任务调度实战
- 最小二乘学习法
- log4j日志应用
- 适配器模式(adapter)
- linux驱动杂项设备类misc