当前位置: 首页 > web >正文

Java:设计模式之结构型-装饰者模式(decorator pattern)

装饰者模式(decorator pattern): 动态地将责任附加到对象上

意图:为对象动态添加功能

类图
在这里插入图片描述

实现

设计不同种类的饮料,饮料可以添加配料,比如可以添加牛奶,并且支持动态添加新配料。每增加一种配料,该饮料的价格就会增加,要求计算一种饮料的价格。
在这里插入图片描述

项目结构

$ tree
.
├── Beverage.java                       # 接口
├── Client.java                         # 客户端调用方
└── impl├── CondimentDecorator.java         # 装饰器抽象类├── DarkRoast.java                  # Beverage的实现类├── HouseBlend.java                 # Beverage的实现类├── Milk.java                       # 装饰器抽象类的实现类└── Mocha.java                      # 装饰器抽象类的实现类

具体代码

public interface Beverage {double cost();
}
public class DarkRoast implements Beverage {@Overridepublic double cost() {return 1;}
}
public class HouseBlend implements Beverage {@Overridepublic double cost() {return 1;}
}
public abstract class CondimentDecorator implements Beverage {protected Beverage beverage;
}
public class Milk extends CondimentDecorator {public Milk(Beverage beverage) {this.beverage = beverage;}@Overridepublic double cost() {return 1 + beverage.cost();}
}
public class Mocha extends CondimentDecorator {public Mocha(Beverage beverage) {this.beverage = beverage;}@Overridepublic double cost() {return 1 + beverage.cost();}
}
public class Client {public static void main(String[] args) {Beverage beverage = new HouseBlend();beverage = new Mocha(beverage);beverage = new Milk(beverage);System.out.println(beverage.cost());// 3.0}
}

参考文章

  1. Java 全栈知识体系:结构型 - 装饰(Decorator)
http://www.xdnf.cn/news/11110.html

相关文章:

  • 获取加载后就自动删除的驱动SYS文件
  • 聚合命令
  • 勒索病毒的策略与建议
  • psp记忆棒测试软件,PSP记忆棒有问题?修复软件MS-Format帮你解忧
  • 最新传奇木马及其防范全攻略
  • 经典网页设计:25个优秀的个人网站设计欣赏
  • 另类的中文乱码
  • Webmax简易入门操作手册(一)
  • QQ在线聊天代码
  • 代理商丨UltraEdit是一套功能强大的文本编辑器
  • 小知识·BitTorrent 简介
  • SELinux入门:了解和配置SELinux
  • .NET下的内存分配机制
  • oracle10g oui-10118,使用ORACLESTREAMSTRMMON监控工具
  • 硬件和软件的关系
  • 51 地图基本接口(三)
  • JS中设置按钮不可用的disabled属性
  • 对战平台原理分析
  • Java中的二进制及基本的位运算
  • 基于51单片机的电子秤设计
  • 基于wifi的室内定位算法设计与实现
  • 2023-2025 时序大模型相关工作汇总
  • 《MyEclipse v8.0M1 绿色注册版》(MyEclipse Enterprise Workbench v8.0M1)8.0M1[压缩包]
  • iOS之JavaScript与OC的相互调用:WKwebview 的使用
  • 【转】3DSMax各个版本的下载地址
  • win7 蓝屏 0x000000c5
  • 提供开放平台网站列表- OpenAPI
  • 软件设计师教程 第5版 下载
  • 【WP|6】WordPress 主题开发详解
  • HTML——css--盒子模型与布局