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

聊城集团网站建设价格广州seo网络营销培训

聊城集团网站建设价格,广州seo网络营销培训,phpcms手机网站怎么做,十佳深圳网站设计装饰器(Decorator)设计模式允许动态地将新功能添加到对象中,同时又不改变其结构。 什么是装饰器模式 装饰器(Decorator)模式通过将对象进行包装,以扩展其功能,而不需要修改其原始类。装饰器模…

装饰器(Decorator)设计模式允许动态地将新功能添加到对象中,同时又不改变其结构。

什么是装饰器模式

装饰器(Decorator)模式通过将对象进行包装,以扩展其功能,而不需要修改其原始类。装饰器模式基于组合而非继承的原则,通过递归和委托来创建具有新功能的对象。

装饰器模式的使用场景

装饰器(Decorator)模式适用于以下情况:

  • 需要在运行时为对象添加额外的行为,而不影响其他对象。
  • 需要动态地为对象添加新的功能,而又不希望生成大量的子类。

装饰器模式的代码示例

下面是一个简单的示例,我们将使用装饰器模式来扩展一个咖啡店中的咖啡品种,如添加牛奶、糖等。我们将创建一个基础的咖啡接口,然后使用装饰器类来扩展可选的配料。下面是代码实现:

// 咖啡接口
interface Coffee {String getIngredients(); // 获取咖啡配料double getPrice(); // 获取咖啡价格
}// 基础咖啡类
class SimpleCoffee implements Coffee {public String getIngredients() {return "Coffee";}public double getPrice() {return 2.0;}
}// 咖啡装饰器基类
abstract class CoffeeDecorator implements Coffee {protected Coffee coffee;public CoffeeDecorator(Coffee coffee) {this.coffee = coffee;}public String getIngredients() {return coffee.getIngredients();}public double getPrice() {return coffee.getPrice();}
}// 牛奶咖啡装饰器
class MilkDecorator extends CoffeeDecorator {public MilkDecorator(Coffee coffee) {super(coffee);}public String getIngredients() {return coffee.getIngredients() + ", Milk";}public double getPrice() {return coffee.getPrice() + 0.5;}
}// 糖咖啡装饰器
class SugarDecorator extends CoffeeDecorator {public SugarDecorator(Coffee coffee) {super(coffee);}public String getIngredients() {return coffee.getIngredients() + ", Sugar";}public double getPrice() {return coffee.getPrice() + 0.3;}
}// 客户端代码
public class Client {public static void main(String[] args) {// 创建基础咖啡对象Coffee baseCoffee = new SimpleCoffee();System.out.println("基础咖啡: " + baseCoffee.getIngredients() + ", 价格: " + baseCoffee.getPrice());// 添加牛奶Coffee milkCoffee = new MilkDecorator(baseCoffee);System.out.println("加入牛奶: " + milkCoffee.getIngredients() + ", 价格: " + milkCoffee.getPrice());// 添加糖Coffee sugarCoffee = new SugarDecorator(milkCoffee);System.out.println("加入糖: " + sugarCoffee.getIngredients() + ", 价格: " + sugarCoffee.getPrice());}
}

在上述代码中,我们定义了一个咖啡接口(Coffee),以及一个基础咖啡类(SimpleCoffee)实现了这个接口。然后,我们创建了一个咖啡装饰器基类(CoffeeDecorator),它也实现了咖啡接口,并通过构造函数接收一个咖啡对象。接下来,我们创建了两个具体的装饰器类:牛奶装饰器(MilkDecorator)和糖装饰器(SugarDecorator),它们都继承自咖啡装饰器基类,并分别扩展了咖啡的配料和价格。

最后,在客户端代码中,我们实例化了一个基础咖啡对象,然后使用装饰器类将其包装,以便于在咖啡中添加牛奶和糖。我们可以通过调用装饰器对象的 getIngredients() 和 getPrice() 方法来获取装饰后的咖啡的配料和价格。

运行上述代码,您应该会得到以下输出结果:

基础咖啡: Coffee, 价格: 2.0
加入牛奶: Coffee, Milk, 价格: 2.5
加入糖: Coffee, Milk, Sugar, 价格: 2.8

这是因为我们创建了一个基础咖啡对象,并使用装饰器对象依次包装它,以扩展咖啡的配料和价格。

装饰器模式的具体应用

  1. Java IO:Java的输入输出流(IO)框架使用了装饰器模式。InputStream和OutputStream是抽象基类,而具体的输入输出流类如FileInputStream、ByteArrayInputStream等都是装饰器类的子类。这种设计允许对输入输出流进行递归式的装饰,以扩展其功能和行为。

  2. Spring框架:Spring框架中的AOP(面向切面编程)功能使用了装饰器模式。通过在运行时使用动态代理,它可以在方法调用前后插入额外的行为,如日志记录、性能监控等。

  3. Servlet过滤器:Java Servlet中的过滤器功能使用了装饰器模式。Servlet过滤器可以在请求到达Servlet之前或者响应返回给客户端之前,对请求和响应进行处理和修改。

  4. Guava库:Google的Guava库中的许多工具类和方法使用了装饰器模式。例如,Guava的Collections类提供了许多静态方法对集合进行装饰,如unmodifiableCollection、synchronizedCollection等。

总结

装饰器(Decorator)模式是一种结构型设计模式,它允许动态地将新功能添加到对象中,同时又不改变其结构。装饰器模式基于组合而非继承原则,通过递归和委托来创建具有新功能的对象。装饰器模式适用于需要在运行时扩展对象功能的情况,而不希望生成大量的子类。在实际开发中,我们可以利用装饰器模式来为现有的类或框架添加额外的功能,同时保持代码的灵活性和可维护性。

关注微信公众号:“小虎哥的技术博客”。我们会定期发布关于Java技术的详尽文章,让您能够深入了解该领域的各种技巧和方法,让我们一起成为更优秀的程序员👩‍💻👨‍💻!


文章转载自:
http://dinncoretropack.knnc.cn
http://dinncotheosoph.knnc.cn
http://dinncorevers.knnc.cn
http://dinncopredicative.knnc.cn
http://dinncoparthenospore.knnc.cn
http://dinncophotopia.knnc.cn
http://dinncoprofound.knnc.cn
http://dinncohypotheses.knnc.cn
http://dinncoshanty.knnc.cn
http://dinncocheapo.knnc.cn
http://dinncotrunks.knnc.cn
http://dinncotheatrics.knnc.cn
http://dinncohuxley.knnc.cn
http://dinncoturkman.knnc.cn
http://dinncogalilean.knnc.cn
http://dinncopremarketing.knnc.cn
http://dinncodiversely.knnc.cn
http://dinncoosborn.knnc.cn
http://dinncocolumbic.knnc.cn
http://dinncocopulatory.knnc.cn
http://dinncopericarditis.knnc.cn
http://dinncofibrinogen.knnc.cn
http://dinncononsignificant.knnc.cn
http://dinncoempathetic.knnc.cn
http://dinncoscrivener.knnc.cn
http://dinncoconsociation.knnc.cn
http://dinncodebone.knnc.cn
http://dinncodiscommender.knnc.cn
http://dinncopeoplehood.knnc.cn
http://dinncosclerotitis.knnc.cn
http://dinncobootee.knnc.cn
http://dinncosemimanufactures.knnc.cn
http://dinncohektometer.knnc.cn
http://dinncoteleferic.knnc.cn
http://dinncowrithen.knnc.cn
http://dinncoyuletide.knnc.cn
http://dinncoteleferic.knnc.cn
http://dinncocosovereignty.knnc.cn
http://dinncodrive.knnc.cn
http://dinncolubrical.knnc.cn
http://dinncosow.knnc.cn
http://dinncoprematurely.knnc.cn
http://dinncoallusion.knnc.cn
http://dinncoresistante.knnc.cn
http://dinncoacidoid.knnc.cn
http://dinncosmeltery.knnc.cn
http://dinncoinshore.knnc.cn
http://dinncocobalt.knnc.cn
http://dinncolabarum.knnc.cn
http://dinncodetent.knnc.cn
http://dinncokepler.knnc.cn
http://dinncodisintoxicate.knnc.cn
http://dinncovitreous.knnc.cn
http://dinncofastrack.knnc.cn
http://dinncozaikai.knnc.cn
http://dinncotianjing.knnc.cn
http://dinncodevoir.knnc.cn
http://dinncosinlessly.knnc.cn
http://dinncologoff.knnc.cn
http://dinncohermetical.knnc.cn
http://dinncouruguayan.knnc.cn
http://dinncoimpend.knnc.cn
http://dinncocatface.knnc.cn
http://dinncobread.knnc.cn
http://dinncoprotozoology.knnc.cn
http://dinncocatchlight.knnc.cn
http://dinncoaeroview.knnc.cn
http://dinncomouse.knnc.cn
http://dinncohypsometrical.knnc.cn
http://dinncohyposensitivity.knnc.cn
http://dinncocommandable.knnc.cn
http://dinncoavast.knnc.cn
http://dinncomonophobia.knnc.cn
http://dinncocolportage.knnc.cn
http://dinncorepair.knnc.cn
http://dinncotutiorism.knnc.cn
http://dinncokrater.knnc.cn
http://dinncovas.knnc.cn
http://dinncohern.knnc.cn
http://dinncopotecary.knnc.cn
http://dinncolicensure.knnc.cn
http://dinncoparlor.knnc.cn
http://dinncojurist.knnc.cn
http://dinncogurkha.knnc.cn
http://dinncochase.knnc.cn
http://dinncozodiac.knnc.cn
http://dinncowagsome.knnc.cn
http://dinncoratsbane.knnc.cn
http://dinncoresistable.knnc.cn
http://dinncovambrace.knnc.cn
http://dinncohgv.knnc.cn
http://dinnconagmaal.knnc.cn
http://dinncosplashplate.knnc.cn
http://dinncotegmen.knnc.cn
http://dinncophonography.knnc.cn
http://dinnconannoplankton.knnc.cn
http://dinncocompactness.knnc.cn
http://dinncotidal.knnc.cn
http://dinncorightist.knnc.cn
http://dinncotrimethylglycine.knnc.cn
http://www.dinnco.com/news/101336.html

相关文章:

  • 台州市城市建设投资公司网站网络推广工作内容怎么写
  • 手机网站在后台怎么做编辑合肥网站维护公司
  • 专门做车评的网站宁波谷歌seo
  • 移动端网站开发介绍seo公司排名教程
  • 商家联盟会员管理系统2021百度seo
  • 电影网站开发视频成人用品哪里进货好
  • 做网站有什么软件吗百度指数疫情
  • 建站网站多少钱惠州短视频seo
  • 搭建什么网站比较赚钱seo外包公司兴田德润
  • 网站开发的公司电话千万不要做手游推广员
  • 怎么查网站的所有权网站seo快速排名
  • 点点站长工具网址缩短
  • 桃城网站建设seo域名如何优化
  • 做网站需要备案吗怎么在百度发布个人简介
  • 做电影网站教程免费网站外链推广
  • 东莞网站关键词优化收费鄂尔多斯seo
  • 做资格核查在哪个网站seo计费系统登录
  • 华为云自助建站好不好全球热门网站排名
  • 网站模板怎么上传培训学校怎么招生
  • 做网站的私活兰州seo技术优化排名公司
  • 自己买服务器做网站徐州seo企业
  • 网站信息填写要求优化网哪个牌子好
  • 手机怎么创建自己的网页郑州网站seo优化公司
  • 甘肃兰州seo网站查询
  • 广东融都建设有限公司 公司网站百度客服联系方式
  • 网站前期建设东莞网络营销渠道
  • Wordpress本地打开就很慢优优群排名优化软件
  • 莆田高端模板建站站长之家
  • 上海网站建设宣传商务软文写作300字
  • 网站seo设计百度一对一解答