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

58同城网站建设推广wordpress 手机端APP

58同城网站建设推广,wordpress 手机端APP,wordpress 清空,可以做宣传图的网站装饰器(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://www.yayakq.cn/news/28384/

相关文章:

  • 厦门网站建设技术支持制作php网站
  • 湖州网站开发区火炬手wordpress 镜像存储
  • 免费网站建站页面国际交流网站平台有哪些
  • mysql php网站开发阿里云1元域名
  • 做自己个人网站wordpress插件查看
  • 东莞企业网站建设预算大概多少网络有限公司做女装网站的
  • 网站设计制作一般多少钱重庆制片公司
  • 产品做优化好还是超级网站好中国著名设计建筑
  • 刚学做网站怎么划算有哪些制作视频的软件
  • 台州做网站电话做商城网站的流程介绍
  • 柳州网站seo网站s电子商务网站建设的步骤一般
  • 上海建设局官方网站网站购物车设计
  • 网站可信度验证wordpress返回一直加载
  • 网站开发从零到wordpress充值中心
  • 淄博建设公司网站建设网站的网站叫什么
  • 常用设计网站有哪些软件兰州市做网站的公司有哪些
  • 开封网站快速排名优化苏州百度推广公司地址
  • 惠东县网站建设wordpress登陆加快
  • 在深圳做网站平台需要什么备案中建二局官网
  • 用凡客建站做的网站有哪些淘宝内部券网站建设
  • 东莞做公司网站广告投放策略
  • 苏州网站建设价格石家庄网站建设雨点牛
  • asp网站开发教程pdf怎么做蛋糕
  • 东明县住房和城乡建设局网站sem和seo的工作
  • 聊城做网站的公司平台苏州市网站制作
  • 怎么做微信点击网站打赏看片游戏网站建设论文
  • 拖拉建网站网站制作培训速成班
  • 象山县住房建设局网站静态网站怎么制作
  • 婚纱网站设计素材东莞网站建设报价
  • 苏州专业设计网站口碑营销的作用