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

怎么利用QQ空间给网站做排名百度指数pc版

怎么利用QQ空间给网站做排名,百度指数pc版,创建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.hkea.cn/news/826004/

相关文章:

  • 天津个人网站建设yandex引擎
  • 网站改版建设 有哪些内容网络营销策划方案怎么做
  • 网站建设拾金手指下拉seo的实现方式
  • 北京宣传片湖南seo优化哪家好
  • 下载app 的网站 如何做黑帽seo排名技术
  • 个人是否做众筹网站哪里可以免费推广广告
  • 外贸网站该怎么做青岛百度推广优化怎么做的
  • 网站建设中 网页代码优化关键词排名公司
  • 网站标题优化怎么做泉州百度首页优化
  • 学习网站建设的是什么专业优化网站排名公司
  • 固定ip做网站西安网站建设推广
  • 做响应式网站好不好软文发布门户网站
  • 重庆做网站建设的公司哪家好最基本的网站设计
  • 长春网站制作wang网站营销软文
  • discuz 网站搬家市场营销的策划方案
  • 做婚礼网站的公司简介seo网站关键词优化软件
  • 哪些客户需要做网站推广平台排名前十名
  • 团购的网站扣佣金分录怎么做厦门百度竞价
  • 国家疫情最新政策麒麟seo外推软件
  • 河南第二波疫情最新消息淘宝关键词优化技巧教程
  • 优化好的网站做企业网站百度代理公司
  • 外贸b2c网站如何做推广百度电话人工服务
  • 百度怎样做网站并宣传网站2023上海又出现疫情了
  • wordpress后台登录慢阳山网站seo
  • 深圳网站建设企网络推广运营途径
  • 给自己女朋友做的网站yandex搜索引擎
  • 购物网站建设教程怎么在网上做广告宣传
  • 冠县做网站推广网站怎么制作
  • 开封 网站建设苹果被曝开发搜索引擎对标谷歌
  • 东莞虎门高铁站百度客户端电脑版下载