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

网站开发常用框架做外国网站百度搜到

网站开发常用框架,做外国网站百度搜到,房地产十大排名,搜索引擎营销实践报告装饰器模式(Decorator Pattern)和适配器模式(Adapter Pattern)都是 结构型设计模式 或者说 包装模式 (Wrapper),用于解决对象的组合和扩展问题,但它们的核心目的、结构和使用场景有显…

装饰器模式(Decorator Pattern)和适配器模式(Adapter Pattern)都是 结构型设计模式 或者说 包装模式 (Wrapper),用于解决对象的组合和扩展问题,但它们的核心目的、结构和使用场景有显著区别。以下是两者的详细对比:


1. 核心意图

装饰器模式适配器模式
动态扩展对象的功能,在不改变原有类的情况下,通过组合实现灵活的功能增强。解决接口不兼容问题,将一个类的接口转换为另一个接口,使原本不兼容的类可以协同工作。

2. 结构对比

装饰器模式的结构
  • Component(组件接口):定义被装饰对象的公共接口,所有具体组件和装饰器都实现该接口。
  • ConcreteComponent(具体组件):实现Component接口的基础对象,提供核心功能。
  • Decorator(装饰器抽象类):继承Component接口,维护一个对Component的引用(组合关系),并定义装饰行为。
  • ConcreteDecorator(具体装饰器):在Decorator的基础上,添加具体的功能或行为。

UML图示意

Component
├── ConcreteComponent
└── Decorator├── ConcreteDecoratorA└── ConcreteDecoratorB
适配器模式的结构
  • Target(目标接口):客户端期望的接口。
  • Adapter(适配器):实现Target接口,同时与Adaptee(被适配类)关联,将Adaptee的接口转换为Target接口。
  • Adaptee(适配者):现有类的接口,可能与Target不兼容。

UML图示意

Target
└── Adapter└── Adaptee

3. 关键区别

a. 目的不同
  • 装饰器模式增强功能,在运行时动态添加行为。
  • 适配器模式接口转换,让不兼容的接口可以协作。
b. 结构不同
  • 装饰器模式:通过组合继承实现,Decorator持有Component的引用,并与Component形成继承关系。
  • 适配器模式:通过组合多重继承实现,Adapter持有Adaptee的引用,但与Adaptee没有继承关系。
c. 接口处理
  • 装饰器模式:装饰器和被装饰对象实现相同的接口,客户端无需关心是否被装饰。
  • 适配器模式:Adapter实现目标接口(Target),而Adaptee可能有完全不同的接口。
d. 扩展方式
  • 装饰器模式:支持叠加多个装饰器,形成功能链(如:加糖→加奶→加咖啡)。
  • 适配器模式:通常一对一适配,不支持叠加(除非嵌套适配,但不常见)。
e. 使用场景
  • 装饰器模式:需要动态、灵活地扩展对象功能,例如:
    • Java的IO流(BufferedInputStream 装饰 FileInputStream)。
    • 咖啡店点单系统(基础咖啡 + 糖 + 奶 → 动态组合不同装饰器)。
  • 适配器模式:需要适配现有类的接口,例如:
    • Java的I/O类库,将字符串数据->字节数据,字节数据-> 流数据 等。
      如 InputStreamReader实现了Reader接口,并持有InputStream引用
    • 适配旧版支付接口到新版系统。
    • 将第三方库的类(如 List)适配为自定义接口。

4. 具体示例对比

装饰器模式示例
// Component接口
interface Coffee {String getDescription();double cost();
}// 具体组件
class SimpleCoffee implements Coffee {public String getDescription() { return "Simple Coffee"; }public double cost() { return 2.0; }
}// 装饰器抽象类
abstract class CoffeeDecorator implements Coffee {protected Coffee decoratedCoffee;public CoffeeDecorator(Coffee coffee) {this.decoratedCoffee = coffee;}
}// 具体装饰器(加糖)
class SugarDecorator extends CoffeeDecorator {public SugarDecorator(Coffee coffee) {super(coffee);}public String getDescription() {return decoratedCoffee.getDescription() + ", Sugar";}public double cost() {return decoratedCoffee.cost() + 0.5;}
}// 使用
Coffee coffee = new SimpleCoffee();
coffee = new SugarDecorator(coffee); // 动态添加糖
coffee = new MilkDecorator(coffee); // 再动态添加奶
System.out.println(coffee.getDescription()); // 输出:Simple Coffee, Sugar, Milk
适配器模式示例
// Target接口(客户端期望的接口)
interface PaymentAdapter {void payWithCreditCard();
}// Adaptee(现有接口,需要适配)
class OldPaymentSystem {public void processPayment(String paymentType) {if ("credit".equals(paymentType)) {// 处理信用卡支付的逻辑}}
}// Adapter(适配器)
class CreditCardAdapter implements PaymentAdapter {private OldPaymentSystem adaptee;public CreditCardAdapter(OldPaymentSystem system) {this.adaptee = system;}public void payWithCreditCard() {adaptee.processPayment("credit"); // 将新接口调用转换为旧接口的方法}
}// 使用
OldPaymentSystem oldSystem = new OldPaymentSystem();
PaymentAdapter adapter = new CreditCardAdapter(oldSystem);
adapter.payWithCreditCard(); // 客户端通过适配器调用旧系统的方法

5. 总结对比表

特性装饰器模式适配器模式
目的动态扩展功能接口兼容性适配
接口关系装饰器和被装饰对象实现同一接口适配器实现目标接口,适配者有不同接口
扩展性支持叠加多个装饰器通常一对一适配
核心操作在原有功能基础上增强或修改行为不同接口的方法调用进行转换
使用场景需要灵活扩展功能(如UI组件、流处理)接口不兼容时需要适配(如第三方库、旧系统)

6. 关键区别总结

  • 装饰器模式:通过组合和继承,增强现有对象的功能,且保持接口一致。
  • 适配器模式:通过组合或多重继承,转换现有对象的接口,使其符合客户端需求。

两者虽然都涉及组合关系,但装饰器关注功能扩展,适配器关注接口兼容。理解它们的核心意图是区分的关键。

http://www.dtcms.com/wzjs/595875.html

相关文章:

  • 如何建立一个好的网站dw网站轮播效果怎么做
  • 哪个公司网站设计好网站建设有哪些分工分
  • 网页设计公司建网站网站设计建筑行业人才网
  • 广东手机网站制作价格焊工培训内容有哪些
  • 网站建设流程域名注册如何投诉做网站的公司
  • 关于药品网站建设策划书网站头像有啥做会清晰
  • 辽宁seo站内优化四川网站建设的公司
  • 郑州达云通网站建设公司冯耀宗seo教程
  • 网站建设需求调研表做网站还得备案
  • 网站改版升级步骤谷歌网站推广销售
  • 恩城seo的网站xx单位网站建设方案
  • 怎么做网站优化的淘宝刷单网站怎么建设源代码
  • 网站开发流程电话如何开发移动网站
  • 物流网站和数据库建设嘉兴建设中心小学网站
  • 建筑公司网站模板免费咨询的图片
  • 福建省建设干部培训中心网站首页seo需要懂代码吗
  • 域名 网站 区别国际新闻最新消息十条摘抄
  • 网站开发具体步骤如何建立优秀企业网站
  • 安徽太和有没有做网站的购物网站建设存在的问题
  • 网站备案期间怎么做设计页面ui
  • 室内设计在线设计软件龙岩seo公司
  • 建设网站应该加什么服务器ASP.NET商业级数据库网站开发实战
  • 做的网站怎么查看点击率沈阳做网站最好的公司
  • 江苏省建设工程一站式申报网站wordpress调用分类名
  • 内蒙古呼和浩特特产湖南正规关键词优化首选
  • 网站域名备案更改WordPress注册不提示
  • iis 网站打不开 建设中个人网站建设的方案
  • 云南省城乡与住房建设厅网站哈尔滨制作网站价格
  • 南京网站推广费用2345传奇世界游戏介绍
  • 自贡网站制作php 网站进入后台