当前位置: 首页 > 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/144706/

相关文章:

  • 做网站公司赚不赚钱张槎网站建设制作
  • 高端设计网站建设汽配网站建设成本
  • 井陉矿区网站建设企业网银怎么登录
  • 温州网站排名优化公司哪家好建设银行有没有全球门户网站
  • 网站评估 源码网络推广工作室
  • 简述营销型企业网站建设的内容建筑网名
  • 设计名字的网站宝安网站制作公司
  • 设计专业考研平面素材网站微信小程序点餐系统怎么做
  • 太原网站开发定制制作个人网站步骤
  • 做毕业网站的流程wordpress评论采集发布
  • 创业 建网站东纺服装人才网
  • 电力建设工程最好的网站网页设计专业课程介绍
  • 湖北网站定制开发价格表调试网站解析域名影响
  • 国外设计工作室网站软文发布
  • 公司网站建设开发方案网站活动页面
  • 深圳做外贸网站公司移动版网站开发
  • 电子商务专业网站免费建工作室网站
  • 成立一间网站开发公司枣庄做网站的公司
  • 营销型网站建设的五力原则梅林关网站建设
  • 中国制造网 做网站费用网站制作潍坊
  • 网站页面制作公司成都市公园城市建设管理局网站
  • 网站建设开发服务费下什么科目六安官网
  • 湖北省建设厅网站a群wordpress通知公告
  • 成都淘宝网站建设wordpress 破解主题下载地址
  • 网站大全官网怎么做宣传
  • php 企业网站 后台图片上传网站建设建设公司资质要求
  • 网站 左右浮动 广告有没有做羞羞事的网站
  • 做网站销售一个星期的计划百度链接插件 wordpress
  • 全网整合营销公司哪些行业适合做seo
  • 有些人做网站不用钱的 对吗舆情服务公司