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

网站备案号是什么意思宁波网站建设的公司

网站备案号是什么意思,宁波网站建设的公司,北京网站建设电话,呼和浩特网站建设价位一、装饰模式简介 装饰模式(Decorator Pattern)是一种结构型设计模式,它允许向一个现有的对象添加新的功能,同时又不改变其结构。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前…

一、装饰模式简介

       装饰模式(Decorator Pattern)是一种结构型设计模式,它允许向一个现有的对象添加新的功能,同时又不改变其结构。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。

二、星巴克咖啡系统设计

根据提供的UML类图,我们来设计一个星巴克咖啡下单系统,该系统可以计算不同咖啡和调料组合的价格。

系统组成

  1. 抽象组件(Beverage):相当于Component类,是所有咖啡和调料的基类

  2. 具体组件:HouseBlend、Expresso、DarkRoast、Decaf,代表不同类型的咖啡

  3. 装饰器(CondimentDecorator):抽象装饰类

  4. 具体装饰器:Milk、Mocha、Soy、Whip,代表不同的调料

三、代码实现

1. 抽象组件(Beverage)

/*** 抽象组件 - 饮料基类* 相当于装饰模式中的Component角色*/
public abstract class Beverage {// 饮料描述,初始为"Unknown Beverage"String description = "Unknown Beverage";/*** 获取饮料描述* @return 饮料描述字符串*/public String getDescription() {return description;}/*** 计算饮料价格 - 抽象方法,由子类实现* @return 饮料价格*/public abstract double cost();
}

2. 具体组件(各种咖啡类型)

2.1 HouseBlend 咖啡

/*** 具体组件 - 混合咖啡*/
public class HouseBlend extends Beverage {public HouseBlend() {description = "House Blend Coffee";}@Overridepublic double cost() {return 0.89;  // 基础价格0.89美元}
}

2.2 Expresso 咖啡

/*** 具体组件 - 浓缩咖啡*/
public class Expresso extends Beverage {public Expresso() {description = "Expresso";}@Overridepublic double cost() {return 1.99;  // 基础价格1.99美元}
}

2.3 DarkRoast 咖啡

/*** 具体组件 - 深焙咖啡*/
public class DarkRoast extends Beverage {public DarkRoast() {description = "Dark Roast Coffee";}@Overridepublic double cost() {return 0.99;  // 基础价格0.99美元}
}

2.4 Decaf 咖啡

/*** 具体组件 - 低因咖啡*/
public class Decaf extends Beverage {public Decaf() {description = "Decaf Coffee";}@Overridepublic double cost() {return 1.05;  // 基础价格1.05美元}
}

3. 抽象装饰器(CondimentDecorator)

/*** 抽象装饰器 - 调料装饰器基类* 继承自Beverage,所以装饰器可以嵌套装饰器*/
public abstract class CondimentDecorator extends Beverage {/*** 获取完整描述 - 抽象方法* 每个具体装饰器需要实现如何添加自己的描述*/@Overridepublic abstract String getDescription();
}

4. 具体装饰器(各种调料)

4.1 Milk 牛奶

/*** 具体装饰器 - 牛奶*/
public class Milk extends CondimentDecorator {// 被装饰的饮料Beverage beverage;public Milk(Beverage beverage) {this.beverage = beverage;}@Overridepublic String getDescription() {return beverage.getDescription() + ", Milk";  // 添加牛奶描述}@Overridepublic double cost() {return beverage.cost() + 0.10;  // 增加0.10美元}
}

4.2 Mocha 摩卡

/*** 具体装饰器 - 摩卡*/
public class Mocha extends CondimentDecorator {Beverage beverage;public Mocha(Beverage beverage) {this.beverage = beverage;}@Overridepublic String getDescription() {return beverage.getDescription() + ", Mocha";  // 添加摩卡描述}@Overridepublic double cost() {return beverage.cost() + 0.20;  // 增加0.20美元}
}

4.3 Soy 豆浆

/*** 具体装饰器 - 豆浆*/
public class Soy extends CondimentDecorator {Beverage beverage;public Soy(Beverage beverage) {this.beverage = beverage;}@Overridepublic String getDescription() {return beverage.getDescription() + ", Soy";  // 添加豆浆描述}@Overridepublic double cost() {return beverage.cost() + 0.15;  // 增加0.15美元}
}

4.4 Whip 奶泡

/*** 具体装饰器 - 奶泡*/
public class Whip extends CondimentDecorator {Beverage beverage;public Whip(Beverage beverage) {this.beverage = beverage;}@Overridepublic String getDescription() {return beverage.getDescription() + ", Whip";  // 添加奶泡描述}@Overridepublic double cost() {return beverage.cost() + 0.10;  // 增加0.10美元}
}

5. 客户端使用示例

/*** 星巴克咖啡店 - 客户端代码*/
public class StarbuzzCoffee {public static void main(String args[]) {// 示例1:一杯纯EspressoBeverage beverage1 = new Expresso();System.out.println(beverage1.getDescription() + " $" + beverage1.cost());// 示例2:DarkRoast加双份Mocha和WhipBeverage beverage2 = new DarkRoast();beverage2 = new Mocha(beverage2);  // 第一次装饰:加Mochabeverage2 = new Mocha(beverage2);  // 第二次装饰:再加Mochabeverage2 = new Whip(beverage2);   // 第三次装饰:加WhipSystem.out.println(beverage2.getDescription() + " $" + beverage2.cost());// 示例3:HouseBlend加Soy、Mocha和WhipBeverage beverage3 = new HouseBlend();beverage3 = new Soy(beverage3);   // 第一次装饰:加Soybeverage3 = new Mocha(beverage3);  // 第二次装饰:加Mochabeverage3 = new Whip(beverage3);   // 第三次装饰:加WhipSystem.out.println(beverage3.getDescription() + " $" + beverage3.cost());}
}

四、代码结构说明

  1. Beverage 是所有饮料的基类,定义了基本接口

  2. 具体咖啡类型(HouseBlend、Expresso等)继承Beverage,实现具体价格

  3. CondimentDecorator是装饰器基类,也继承自Beverage

  4. 具体调料(Milk、Mocha等)继承CondimentDecorator,包装一个Beverage对象

  5. 客户端可以自由组合咖啡和调料,通过层层装饰实现复杂组合

五、装饰模式的优势

  1. 灵活性:可以动态地添加或删除功能,比继承更灵活

  2. 避免类爆炸:不需要为每种组合创建子类

  3. 符合开闭原则:对扩展开放,对修改关闭

  4. 运行时添加功能:可以在运行时决定添加哪些装饰

六、总结

       通过这个星巴克咖啡系统的例子,我们看到了装饰模式在实际应用中的强大之处。它让我们能够轻松地组合各种咖啡和调料,而不需要创建大量的子类。这种模式特别适合那些需要动态、透明地添加对象功能的场景。

http://www.dtcms.com/wzjs/158024.html

相关文章:

  • 网站建设与管理复习知识点百度电脑版下载安装
  • 安装wordpress建站程序成都百度百科
  • python和php哪个做网站芜湖网络营销公司
  • 学校网站建设客户需求调查问卷魔方优化大师官网
  • 哪个网站专门做代购南宁推广软件
  • 如何接北京网站制作深圳电子网络推广查询
  • 做网站主要显哪些内容百度seo排名优化提高流量
  • 用什么网站做框架图上海网络推广公司
  • 天河区网站建设长春网站优化平台
  • 美国用的网站空间互联网营销师证书怎么考
  • 内部网站建设教程网络营销推广服务
  • wordpress查看访问者ip惠州seo代理
  • 企业网站建设方案价格杭州网站优化流程
  • 游戏评测网站怎么做网店推广平台
  • 企查查官网入口网页版seo软件服务
  • 18元套餐深圳网站seo公司
  • 网站是怎么搭建的产品软文怎么写
  • 平台网站如何做推广专业软文发稿平台
  • 高州网站建设公司做网站推广
  • 盘锦网站建设多少钱短视频代运营方案模板
  • 网站建设APP的软件室内设计培训班学费一般多少
  • 未来网站建设想法上海城市分站seo
  • 免费网站建设合同书阿里云万网域名注册
  • 张店免费做网站厦门人才网个人登录
  • 政府网站制作平台建个网站费用多少
  • 模板网站可以做备案吗seo公司排名教程
  • 国内网建公司排名seo关键词选择及优化
  • 信用中国 网站 建设方案手机系统流畅神器
  • 铭做网站建设刷粉网站推广快点
  • 淘宝买模板注浆做网站保定seo外包服务商