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

技术支持 东莞网站建设bmapgmapseo效果最好的是

技术支持 东莞网站建设bmapgmap,seo效果最好的是,青岛济南网站建设优化,网站站点是什么概述 当我们编写软件时,有时我们会遇到需要在不修改现有代码的情况下添加新功能的情况。这时,我们可以使用装饰器模式。 装饰器模式是一种结构性设计模式,它允许我们在不改变对象接口的情况下动态地向对象添加功能。装饰器模式通过创建一个…

概述

当我们编写软件时,有时我们会遇到需要在不修改现有代码的情况下添加新功能的情况。这时,我们可以使用装饰器模式。

装饰器模式是一种结构性设计模式,它允许我们在不改变对象接口的情况下动态地向对象添加功能。装饰器模式通过创建一个包装对象来实现这一目的。这个包装对象具有与原始对象相同的接口,但可以通过添加或覆盖方法来扩展或修改其行为。

装饰器模式通常用于以下情况:

  • 在运行时动态地向对象添加新功能,而不会影响其他对象。
  • 在不改变现有代码的情况下添加新功能。
  • 以层次结构方式组合对象以获得更大的灵活性。

代码示例

下面是一个使用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.fp688.cn/news/159088.html

相关文章:

  • wordpress如何添加备案号seo管理是什么
  • asp网站开发技术背景介绍竞价排名适合百度吗
  • 男生做污污的网站浙江百度代理公司
  • ipv6网站如何做网店推广方法有哪些
  • 做网站需要申请商标哪些类目电商运营推广的方式和渠道有哪些
  • 三站合一 网站建设哈尔滨网络优化公司有哪些
  • 资讯型电商网站优缺点外贸网站外链平台
  • WordPress部署商城如何做网站seo
  • 广西网站建设企业网站推广有哪些
  • 做bannar在哪个网站参考seo诊断分析在线工具
  • 扁平化设计网站建设河南网站定制
  • 开发网站需要多少资金互联网广告销售是做什么的
  • 清城网站seo如何在各大网站发布信息
  • 南阳卧龙区2015网站建设价格seo如何建立优化网站
  • 黎平网站建设电子商务软文写作
  • 网站建设包括哪些廊坊seo外包公司费用
  • 建设部 招投标网站刷百度关键词排名优化
  • 网站备案视频网站网络推广运营
  • 摄影网站怎么做数据库百度推广客户端下载安装
  • 南郊做网站什么叫关键词举例
  • 自己做局域网站媒体发布平台
  • 好学校平台网站模板下载安装网络推广方法有哪几种
  • 泉州做网站需要多少钱aso优化app推广
  • 网站建设中心关键词排名提升工具
  • 阿里巴巴国际网站首页视频怎么做网页搜索引擎
  • 韶关网站建设面点培训学校哪里有
  • 网站不提交表单公司网页制作教程
  • 黄石做网站公司网络营销的背景和意义
  • 做暧昧视频网站淘宝seo排名优化的方法
  • 国内新闻今日头条seo工程师招聘