当前位置: 首页 » 网络知识 » 建站知识 » 正文

java适配和装饰

发布时间:2025-02-05 以下文章来源于网友投稿,内容仅供参考!

Java开发中的适配器(Adapter)和装饰器(Decorator)是两种常用的设计模式。适配器模式主要用于使原本不兼容的类之间能够协同工作,而装饰器模式则是在不改变接口的前提下增强一个对象的功能。

java中的适配器模式通常是通过实现接口或继承抽象类来实现的。例如下面这段代码就是一个将Enumeration接口转换为Iterator接口的适配器。

public class EnumerationIteratorimplements Iterator{private Enumerationenumeration; public EnumerationIterator(Enumerationenumeration) {this.enumeration = enumeration;}public boolean hasNext() {return enumeration.hasMoreElements();}public E next() {return enumeration.nextElement();}public void remove() {throw new UnsupportedOperationException();}}

可以看到,通过实现Iterator接口并在构造函数中传入一个Enumeration对象,我们就能够将Enumeration对象适配为Iterator接口了。

相比适配器模式,装饰器模式则主要用于在运行时动态地为一个对象添加新的行为。例如下面这段代码就是一个简单的装饰器模式的实现:

public class DecoratorTest {public static void main(String[] args) {Beverage beverage = new Espresso();beverage = new Mocha(beverage);beverage = new Whip(beverage);System.out.println(beverage.getDescription() + " $" + beverage.cost());}}interface Beverage {String getDescription();double cost();}class Espresso implements Beverage {public String getDescription() {return "Espresso";}public double cost() {return 1.99;}}abstract class CondimentDecorator implements Beverage {protected Beverage beverage;public CondimentDecorator(Beverage beverage) {this.beverage = beverage;}}class Mocha extends CondimentDecorator {public Mocha(Beverage beverage) {super(beverage);}public String getDescription() {return beverage.getDescription() + ", Mocha";}public double cost() {return beverage.cost() + 0.20;}}class Whip extends CondimentDecorator {public Whip(Beverage beverage) {super(beverage);}public String getDescription() {return beverage.getDescription() + ", Whip";}public double cost() {return beverage.cost() + 0.10;}}

可以看到,我们定义了一个饮料(Beverage)接口,然后通过对Espresso类进行装饰,添加了摩卡和奶泡这两种调料。通过这种方式,我们既不需要修改Espresso类的代码,也能在运行时动态地为其添加新的行为。

  • • oracle 11g bbed

    在数据库管理中,数据的完整性和安全性是最重要的,而oracle 11g bbed(Block Browser and Editor)就是一款专业的数据块查看和

  • • javascript 继承的好处

    JavaScript 继承是一种非常重要的特性,它允许我们创建一种对象,这种对象可以继承其他的对象的属性和方法。JavaScript 继承是很

  • • php nav

    在网页设计中,导航栏是至关重要的元素之一,因为它是用户从一个页面导航到另一个页面的主要方式。而PHP nav则是一种使用PHP代码

  • • macos beta检查正式版

    最近,很多人都对 macOS beta 版进行了试验,并且遇到了各种问题。然而,我们发现在正式版本中,这些问题已经被解决了。因此,我

  • • css增加class属性值

    在CSS中,class属性可以用于为HTML元素添加样式。如果我们想在某个元素上添加一个新的样式,可以使用增加class属性值的方法。这

  • 中国人民银行汇率查询
    银联汇率
    360文库
    腾讯广告推广平台入口
    360移动开放平台
    360广告投放平台
    360广告联盟平台官网
    京东联盟官网登录入口
    微盟官网
    阿里妈妈官网
    首都之窗网站:http://www.beijing.gov.cn
    北京人民政府网站:www.beijing.gov.cn
    国家互联网信息办公室网站:http://www.scio.gov.cn
    全国人社政务服务平台:http://www.12333.gov.cn
    中央人民政府门户网站:www.gov.cn
    沈阳政务服务平台:http://zwfw.shenyang.gov.cn
    广东省公共机构能源资源消费统计工作指南
    黑龙江政务服务平台:http://zwfw.hlj.gov.cn
    公共机构能源资源消费统计系统:http://nyzyxftj.ggj.gov.cn
    国家能源局网站:http://www.nea.gov.cn