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

广州手机网站建设价格名城苏州网首页

广州手机网站建设价格,名城苏州网首页,用python做网站多吗,网站设计公司域名服务器建设概述 当我们编写软件时#xff0c;有时我们会遇到需要在不修改现有代码的情况下添加新功能的情况。这时#xff0c;我们可以使用装饰器模式。 装饰器模式是一种结构性设计模式#xff0c;它允许我们在不改变对象接口的情况下动态地向对象添加功能。装饰器模式通过创建一个…概述 当我们编写软件时有时我们会遇到需要在不修改现有代码的情况下添加新功能的情况。这时我们可以使用装饰器模式。 装饰器模式是一种结构性设计模式它允许我们在不改变对象接口的情况下动态地向对象添加功能。装饰器模式通过创建一个包装对象来实现这一目的。这个包装对象具有与原始对象相同的接口但可以通过添加或覆盖方法来扩展或修改其行为。 装饰器模式通常用于以下情况 在运行时动态地向对象添加新功能而不会影响其他对象。在不改变现有代码的情况下添加新功能。以层次结构方式组合对象以获得更大的灵活性。 代码示例 下面是一个使用Java实现的装饰器模式的示例以模拟咖啡店销售咖啡的过程。 首先我们定义一个接口 Coffee表示咖啡的基本特性包括名称和价格 public interface Coffee {String getDescription();double getCost(); }然后我们定义一个具体的咖啡类 SimpleCoffee它实现了 Coffee 接口 public class SimpleCoffee implements Coffee {Overridepublic String getDescription() {return Simple coffee;}Overridepublic double getCost() {return 1.0;} }这个类表示最简单的咖啡没有任何装饰。 接下来我们定义一个装饰器类 CoffeeDecorator它也实现了 Coffee 接口但是它包含一个 Coffee 类型的成员变量 decoratedCoffee public abstract class CoffeeDecorator implements Coffee {protected Coffee decoratedCoffee;public CoffeeDecorator(Coffee decoratedCoffee) {this.decoratedCoffee decoratedCoffee;}Overridepublic String getDescription() {return decoratedCoffee.getDescription();}Overridepublic double getCost() {return decoratedCoffee.getCost();} }这个类的作用是让子类可以方便地覆盖 getDescription() 和 getCost() 方法以添加额外的装饰。 接下来我们定义两个具体的装饰器类Milk 和 Whip它们分别添加牛奶和奶泡 public class Milk extends CoffeeDecorator {public Milk(Coffee decoratedCoffee) {super(decoratedCoffee);}Overridepublic String getDescription() {return decoratedCoffee.getDescription() , Milk;}Overridepublic double getCost() {return decoratedCoffee.getCost() 0.5;} }public class Whip extends CoffeeDecorator {public Whip(Coffee decoratedCoffee) {super(decoratedCoffee);}Overridepublic String getDescription() {return decoratedCoffee.getDescription() , Whip;}Overridepublic double getCost() {return decoratedCoffee.getCost() 0.7;} }这些类都是 CoffeeDecorator 的子类它们实现了自己的 getDescription() 和 getCost() 方法来添加额外的功能。 最后我们可以使用这些类来创建不同类型的咖啡例如 Coffee simpleCoffee new SimpleCoffee(); System.out.println(simpleCoffee.getDescription() $ simpleCoffee.getCost());Coffee coffeeWithMilk new Milk(new SimpleCoffee()); System.out.println(coffeeWithMilk.getDescription() $ coffeeWithMilk.getCost());Coffee coffeeWithMilkAndWhip new Whip(new Milk(new SimpleCoffee())); System.out.println(coffeeWithMilkAndWhip.getDescription() $ coffeeWithMilkAndWhip.getCost());JDK中的应用 在 Java IO 库中许多类都使用了装饰器模式来提供更高级的功能。这些类都是在基本的输入和输出类之上建立的通过使用不同的装饰器来组合它们从而实现了各种不同的功能。 例如BufferedReader 和 BufferedWriter 类就是基于装饰器模式实现的。BufferedReader 类是 Reader 类的一个装饰器它提供了缓冲输入的功能。当我们需要从一个输入流中读取数据时BufferedReader 将输入流中的数据读取到缓冲区中然后逐个字符地返回它们。这样做的好处是可以减少系统调用从而提高效率。 以下是一个使用 BufferedReader 类的示例 FileReader fileReader new FileReader(file.txt); BufferedReader bufferedReader new BufferedReader(fileReader);String line; while ((line bufferedReader.readLine()) ! null) {System.out.println(line); }bufferedReader.close(); fileReader.close();在这个例子中我们首先创建了一个 FileReader 对象来读取文件然后将其传递给 BufferedReader 的构造函数。BufferedReader 对象使用 FileReader 对象作为其输入源并提供了缓冲输入的功能。在 while 循环中我们使用 readLine() 方法逐行读取文件并打印每一行。 类似的BufferedWriter 类也是 Writer 类的一个装饰器它提供了缓冲输出的功能。当我们需要将数据写入到一个输出流中时BufferedWriter 将数据写入到缓冲区中直到缓冲区满或者我们调用 flush() 方法时才将缓冲区中的数据写入到输出流中。 以下是一个使用 BufferedWriter 类的示例 FileWriter fileWriter new FileWriter(file.txt); BufferedWriter bufferedWriter new BufferedWriter(fileWriter);bufferedWriter.write(Hello, world!); bufferedWriter.newLine(); bufferedWriter.write(How are you?);bufferedWriter.close(); fileWriter.close();在这个例子中我们首先创建了一个 FileWriter 对象来写入文件然后将其传递给 BufferedWriter 的构造函数。BufferedWriter 对象使用 FileWriter 对象作为其输出目标并提供了缓冲输出的功能。我们使用 write() 方法将字符串写入到缓冲区中并使用 newLine() 方法添加一个新行。在最后我们调用 close() 方法来关闭 BufferedWriter 和 FileWriter 对象。 通过使用装饰器模式Java IO 库中的类可以轻松地组合成各种不同的输入和输出组合以提供更高级的功能。 类图 当使用装饰器模式时通常需要定义以下四种角色 抽象组件Component定义了被装饰对象的基本接口。可以是一个抽象类或者接口。在 Java 中它通常是一个接口。 具体组件Concrete Component实现了抽象组件接口的具体对象也是被装饰的对象。 抽象装饰器Decorator维持一个指向抽象组件对象的引用并定义了与抽象组件接口一致的接口。 具体装饰器Concrete Decorator向装饰对象添加额外的职责或行为。 其中Component 定义了被装饰对象的基本接口。ConcreteComponent 实现了 Component 接口也就是被装饰的对象。Decorator 是一个抽象类它维持一个指向 Component 对象的引用并定义了与 Component 接口一致的接口。ConcreteDecoratorA 和 ConcreteDecoratorB 分别是具体的装饰器类它们继承自 Decorator 类并向被装饰对象添加额外的职责或行为。 通过组合不同的具体组件和具体装饰器可以创建出许多不同的对象从而提供了灵活而且可扩展的设计。
http://www.dnsts.com.cn/news/249616.html

相关文章:

  • 义乌设计网站龙华建网站多少钱
  • 学网站开发与维护有用吗ppt模板网站排行
  • 关于网站建设的问题seo课程培训要多少钱
  • 西安建设公司网站网站设计酷站
  • 网站建设与管理试卷A绍兴seo网站推广
  • 网站设计网页的优缺点付费资源下载站源码
  • 快速搭建网站模板 下载建设机械网站方案设计
  • 大连网络营销网站茌平网站建设道气钻
  • 天博网站建设网络推广公司怎么报税
  • 做网站空间需要多大mitao wordpress
  • 怎样建设网站网站手机自适应网站源码
  • 网站内容段落之间有空格对seo有影响吗怎么建设一个手机网站
  • 网站织梦模板windows优化大师软件介绍
  • 网站运营与公司wordpress主题开发出
  • 网站模板内容怎么改网页框架与布局
  • 制作企业网站html爬虫网站开发
  • 瀑布流资源网站模板网络营销经典案例
  • 赣州有做网站推广的公司吗wordpress如何增加产品类目
  • 页面设计要点网站的内部优化公司
  • 网站建设投标书怎么制作手机端网站开发价格
  • 任丘网站开发建设怎么选网站建设主要流程
  • 快递网站推广怎么做如何做网站镜像
  • 泉州网站优化排名推广太原做网站个人
  • 网站规划和建设的基本要求济南传承网络技术有限公司
  • 企业网站无锡涂料网站源码
  • 做网站需要哪些费用支出在过没wordpress火吗
  • wordpress array网站建设 seo模块
  • wordpress上传路径报错百度seo排名优化公司哪家强
  • 免费做字体的网站上海上市公司100强
  • 自己做网站都要什么软件wordpress怎么使用插件