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

日本设计分享网站百度网站推广教程

日本设计分享网站,百度网站推广教程,哪个网站可以做行程,网站开发合作协议定义 装饰器模式是一种结构型设计模式,允许在不改变对象结构的情况下,动态地为对象添加新功能。 概念: 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种模式通过…

定义

装饰器模式是一种结构型设计模式,允许在不改变对象结构的情况下,动态地为对象添加新功能。
概念:
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种模式通过将对象包装在装饰器类中,以便动态地修改其行为。装饰器模式提供了一种灵活的替代继承方式来扩展功能,避免通过继承引入静态特征,特别是在子类数量急剧膨胀的情况下。

结构

  1. 组件接口(Component):定义一个接口,规定可以动态添加职责的对象标准。
  2. 具体组件(ConcreteComponent):实现该接口的具体类,提供基本功能。
  3. 抽象装饰者(Decorator):实现同样的接口,持有一个组件接口的引用,可以在任何时候动态的添加功能。
  4. 具体装饰者(ConcreteDecorator):扩展抽象装饰者,添加额外的职责。

应用场景

装饰器模式是一种强大的设计模式,适用于需要动态扩展对象功能的场景,能够有效提高代码的灵活性和可维护性。

  1. 动态添加功能:当需要在运行时动态的添加或者撤销对象的功能时,装饰器模式非常有用
  2. 避免类爆炸:在需要扩展类的功能但又不想通过继承的方式来实现时,装饰器模式可以有效避免类的数量急剧增加。
  3. 增强现有功能:可以在不修改现有代码情况下,增强现有功能。

示例

假设我们有一个基本的咖啡类 Coffee,我们可以通过装饰器模式为其添加不同的配料,如牛奶、糖等,而不需要为每种组合创建新的子类。每个配料都可以作为一个具体装饰者,动态地添加到咖啡对象中。
代码

/*** @ClassName Coffee* @Description 组件接口* @Author Feng* @Date 2025/6/15**/
public interface Coffee {double cost();String getDescription();
}
class SimpleCoffee implements Coffee {@Overridepublic double cost() {return 2.;}@Overridepublic String getDescription() {return "没加任何东西的咖啡";}
}
abstract class CoffeeDecorator implements Coffee{protected Coffee coffee;public CoffeeDecorator(Coffee coffee) {this.coffee = coffee;}@Overridepublic double cost() {return coffee.cost();}@Overridepublic String getDescription() {return coffee.getDescription();}
}
class MilkCoffee extends CoffeeDecorator{public MilkCoffee(Coffee coffee) {super(coffee);}@Overridepublic double cost() {return 4. + coffee.cost();}@Overridepublic String getDescription() {return coffee.getDescription() + "加了奶";}
}
class SugarCoffee extends CoffeeDecorator{public SugarCoffee(Coffee coffee) {super(coffee);}@Overridepublic double cost() {return 3. + coffee.cost();}@Overridepublic String getDescription() {return coffee.getDescription() + "加了糖";}
}
public class DecoratorTest {public static void main(String[] args) {SimpleCoffee simpleCoffee = new SimpleCoffee();System.out.println(simpleCoffee.getDescription() + " \t价格为:" + simpleCoffee.cost());// 加了糖的咖啡Coffee sugarCoffee = new SugarCoffee(simpleCoffee);System.out.println(sugarCoffee.getDescription() + " \t价格为:" + sugarCoffee.cost());// 加了奶的咖啡Coffee milkCoffee = new MilkCoffee(simpleCoffee);System.out.println(milkCoffee.getDescription() + " \t价格为:" + milkCoffee.cost());// 加了糖和奶的咖啡Coffee sugarMilkCoffee = new SugarCoffee(milkCoffee);System.out.println(sugarMilkCoffee.getDescription() + " \t价格为:" + sugarMilkCoffee.cost());}
}

在这里插入图片描述
优点
灵活性:可以在运行时动态的添加或者修改对象的功能
可扩展性:避免了通过继承引入的复杂性,提供了更好的扩展性和维护性。

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

相关文章:

  • 动漫网站建设方案项目书目录排名推广网站
  • 青田网站做服装找工作百度手机怎么刷排名多少钱
  • 中宣部官方网站周建设可以看封禁网站的浏览器
  • 个人做网站租云服务器沪深300指数基金排名
  • 迁西县住房和城乡规划建设局网站长沙靠谱seo优化
  • 行业门户网站建设方案深圳网站优化网站
  • 怎样通过阿里云建设网站查询网站收录
  • 重庆网站建设齐重庆零臻科技百度的营销方式有哪些
  • 网站建设中html成都新闻最新消息
  • 莱芜金点子信息港房产临沧seo
  • 太原做网站公司运营站长seo推广
  • 自己的网站怎么做app营销qq
  • 韩国网站源码下载搜索引擎优化的定义
  • 工业信息部网站备案中小企业网站制作
  • dw做网站详细教程软文写作实训总结
  • 国内做新闻比较好的网站有哪些国内seo排名
  • 做的好的茶叶网站有哪些技能培训机构排名前十
  • 做销售的网站网络软文怎么写
  • 网站开发建设合同公司网络优化方案
  • 大连网站建设报价优质商家2345网址导航怎么彻底删掉
  • 芜湖市建投公司官网站长工具seo优化系统
  • 怎样查后缀vc域名网站免费建站系统
  • 网站优化建设公司360优化大师官方下载手机
  • 杭州网站建设技术西安优化外包
  • 网站建设乚金手指花总15开发一个网站
  • 市场营销方案案例范文爱站网seo工具
  • 微信做网站代购如何在google上免费推广
  • 自己建网站备案网站排名首页
  • 最常用的规划网站网站为什么要seo
  • 软件技术网站怎么做宁波网络营销策划公司