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

器材管理网站开发福田网站建设推广

器材管理网站开发,福田网站建设推广,西宁网站建设服务公司,研究网站开发意义什么是装饰者模式 装饰者模式动态地将额外责任附加到对象上。对于拓展功能,装饰者提供子类化的弹性替代方案。 --《Head First Design Patterns》中的定义 为什么会有装饰者模式 根据上述定义,简单来说,装饰者模式就是对原有的类&#xff0c…

什么是装饰者模式

装饰者模式动态地将额外责任附加到对象上。对于拓展功能,装饰者提供子类化的弹性替代方案。 --《Head First Design Patterns》中的定义

为什么会有装饰者模式

根据上述定义,简单来说,装饰者模式就是对原有的类,增加一些额外的功能或者行为。用普通的继承或者组合也可以实现,但是单纯用继承或者组合来做,会产生大量的拓展类而导致"类爆炸"。

书中用咖啡的价格为例,说明了类爆炸这个概念:

咖啡店的咖啡的种类有4种,每种的价格不一样
在这里插入图片描述

若除了咖啡本身,还可以要求加上不同的调料,例如蒸奶(milk)、豆奶(soy)、摩卡(Mocha)。这样子,子类的拓展组合,就会有很多种,从而导致类爆炸,如下图所示。
在这里插入图片描述

装饰者模式的特点

  • 装饰者和被装饰者继承同一个基类。因为装饰者必须能够取代被装饰者,这里利用继承达到“类型匹配”,而不是利用继承获取“行为”
  • 装饰者拥有(has a)一个与被装饰者相同的基类类型属性(类似策略模式)
  • 可以用一个或多个装饰者类包装同一个对象
  • 装饰者可以在所委托被装饰者的行为之前或行为之后或行为之前与之后加上自己的行为,以达到特定的目的

装饰者模式的类图

在这里插入图片描述

例子

以上述咖啡店的咖啡价格为例子

  1. 基类:对应上图中的Component
public abstract class Beverage {String description = "Unknown Beverage";public String getDescription() {return description;}public abstract double cost();
}

2. 咖啡种类的拓展类: 对应上图中的ConcreteComponent

public class Espresso extends Beverage{public Espresso() {description = "Espresso";}@Overridepublic double cost() {return 1.99;}
}public class HouseBlend extends Beverage {public HouseBlend() {description = "HouseBlend";}@Overridepublic double cost() {return .89;}
}

3. 调料类

public class Mocha extends CondimentDecorator {public Mocha(Beverage beverage) {this.beverage = beverage;}@Overridepublic String getDescription() {return beverage.getDescription() + ", Mocha";}@Overridepublic double cost() {return beverage.cost() + .20;}
}public class Whip extends CondimentDecorator{public Whip(Beverage beverage) {this.beverage = beverage;}@Overridepublic String getDescription() {return beverage.getDescription() + ", whip";}@Overridepublic double cost() {return beverage.cost() + .10;}
}

4. 测试

public static void main(String[] args) {// 要一杯浓缩咖啡,不加调料Beverage beverage = new Espresso();System.out.println(beverage.getDescription() + " $" + beverage.cost());//要一杯HouseLand,带有2份mocha和whipBeverage beverage1 = new HouseBlend();beverage1 = new Mocha(beverage1);beverage1 = new Mocha(beverage1);beverage1 = new Whip(beverage1);System.out.println(beverage1.getDescription() + " $" + beverage1.cost());}

上述的咖啡喝调料可以在不改动基类代码的基础上,进行随意组合。

装饰者模式用到的设计原则

类应该对拓展开放,对修改关闭(开闭原则)

应用

java中的I/O流
在这里插入图片描述
参考:装饰者模式

http://www.yayakq.cn/news/918244/

相关文章:

  • 怎么登陆建设银行网站看开户行校园推广策略
  • 网站推广服务合同模板wordpress用不了了
  • 学校 网站建设招聘怎么制作属于自己的网站
  • 网站专题策划网站推广的渠道有
  • 网站开发进度控制计划表网站建设公司的发展规划
  • 北京优化词网站小程序发布流程在哪里
  • 西安网站优化维护三元里网站建设
  • 怎么保证网站安全性建筑人才网官方网站入口
  • 如何编程制作自己的网站十大垂直电商平台
  • 互联网电商网站建设电商网站系统
  • wordpress全站cdn ssl网站成本费用
  • 个性化网站制作单页网站建设
  • 聊城做网站的公司策划网站改版建设
  • 建设银行昆山分行网站电商资源网站
  • 网站建设响应式汕尾旅游攻略app跳转网站
  • 做网站购买模板微信公众平台开发源代码
  • 个人如何建设网站网站 运营
  • 一个网站建设都需要什么做网投网站好
  • 电脑禁止访问网站设置腾讯企业邮箱手机登录入口
  • 专业零基础网站建设教学培训响应式个人网站psd
  • 大连网站建设ewaylife工程建设管理网站
  • 英文广告网站模板免费下载云南科技网站建设
  • 网站的数据库怎么备份山东建设机械协会官方网站
  • 住房和城乡建设部网站进不去去国外做外卖网站
  • 网站建设那个比较好做视频解析网站犯法
  • 佛山微网站建设多少钱公司网站建设方案书例文
  • 网站定位广告哪里的wordpress主题比较好
  • 网站开发常用字体全渠道营销
  • 哪个网站做初中作业广告传媒建设网站
  • 如何在eclipse上做网站wordpress调用文章第一张图片