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

做网站要具备些什么易营宝网站建设

做网站要具备些什么,易营宝网站建设,动漫设计师资格证,正规app开发和制作公司什么是装饰者模式 装饰者模式动态地将额外责任附加到对象上。对于拓展功能,装饰者提供子类化的弹性替代方案。 --《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/453854/

相关文章:

  • 网站的排版黄岛网站建设公司哪家好
  • 好分数的开发公司昆明seo排名外包
  • 网站开发用什么技术asp有哪些网站做的好
  • 绥芬河建设工程网站做招聘信息的网站有哪些
  • 手游传奇发布网站999wordpress页面添加主页
  • 烟台网站建设多少钱网站建设属于哪类税率
  • 免费观看行情软件网站下载wordpress 百度seo
  • 临沂网站建设技术支持网络营销包括的主要内容有
  • 做网站应该掌握的技术免费咨询法律援助该打什么电话
  • 购物网站详细设计网页设计与制作策划书
  • 建设网站的定位怎么恶意点击对手竞价
  • 房产网站建设价格广州seo网络优化公司
  • 网站管理服务在线制作图片的网站
  • 有哪个理财网站是专门做汽车抵押的安阳工学院图书馆找做网站的书在哪
  • 成都房建设部网站搭建正规网站
  • 机械设计网站推荐网站建设服务哪个便宜啊
  • 一个域名两个网站松阳建设局网站
  • php开源建站系统wordpress防止频繁访问
  • 松江做移动网站婚纱影楼网站免费源码
  • 鹤壁做网站法治网站的建设整改措施
  • 北京优化网站推广网站建设经济可行性
  • 网站建设方案书 模版东莞设计网站企业
  • 相城建设监理有限公司网站wordpress 版块
  • 做网站所需的知识技能茶叶推广软文
  • 东莞外贸网站制作个人怎么做微信公众号和微网站吗
  • 富顺住房和城乡建设厅网站reactjs 做网站
  • 网站含中国的备案网站建设需要提供什么东西
  • 免费建网站程序技术专业网站建设
  • 大型网站和小企业站优化思路科技公司logo
  • 网站建设和网络搭建是一回事吗昆山网站建设网站建设