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

唐山网站建设怎么样wordpress the7 使用

唐山网站建设怎么样,wordpress the7 使用,直播app开发费用,百度云服务器建设网站概述 当我们编写软件时,有时我们会遇到需要在不修改现有代码的情况下添加新功能的情况。这时,我们可以使用装饰器模式。 装饰器模式是一种结构性设计模式,它允许我们在不改变对象接口的情况下动态地向对象添加功能。装饰器模式通过创建一个…

概述

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

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

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

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

代码示例

下面是一个使用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.yayakq.cn/news/730680/

相关文章:

  • 用什么软件做网站最简单做化工类网站内容
  • 做门户网站用什么系统农特产品网站建设合同模板
  • 建设部造价工程师网站网站开发用户分析
  • 大型电子商务网站开发架构能免费做网站吗
  • 龙岗做手机网站北京网站制作南昌
  • 小型网站有哪些广告图文制作图片
  • 与有权重网站做友链济南企业网站设计公司
  • 网站建设 空间有什么免费ppt模板网站
  • 台州网站排名网站开发兼职成都
  • 营销型网站制作的目的是怎样建设一个自己的网站微商
  • 网站前台模板下载免费的微信小程序
  • 如何用域名访问网站网页翻译不见了
  • 个人信息网站wordpress固定链接设置后404
  • 网站怎么做app吗动易做网站
  • 古交网站建设大型网站建设公司沈阳
  • 怎么看一个网站是用什么程序做的新手小白怎样运营1688店铺
  • 网站策划专有技术利用电脑做网站
  • 散文古诗网站建设目标网站建设的需要是什么
  • 石家庄市建设厅网站网页设计网站含义
  • 网站备案为什么这么慢wordpress访问不了
  • 想要黑掉一个网站 要怎么做磁力天堂最佳搜索引擎入口
  • 专业做网站建设设计重庆网站建站价格
  • 广西南宁网站建设公司重庆软件制作
  • 个人网站建设价格表福田做网站需要多少钱
  • 重庆哪家制作网站好做软装素材从哪些网站找
  • 精湛的网站建设排行榜业务型网站首页
  • 网站建设费 摊销处理用哪个软件做网站
  • 在互联网上建设网站可选择的方案有电子书新手学做网站
  • 建立网站的第一步是建立什么开封网站建设公司
  • 汽车之家网站是谁做的广西网站建设哪家有