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

ps中怎样做网站轮播图片华与华营销策划公司

ps中怎样做网站轮播图片,华与华营销策划公司,中国建设机械委员会网站,用dede.com网站上传文件设计模式17-适配模式 动机定义与结构C代码推导总结应用具体应用示例 动机 在软件系统中由于应用环境的变化常常需要将一些现存的对象。放到新的环境中去应用。但是新环境要求的接口是这些现存对象所不满足的。那么这种情况下如何应对这种迁移的变化?如何既能利用现…

设计模式17-适配模式

  • 动机
  • 定义与结构
  • C++代码推导
  • 总结
  • 应用
  • 具体应用示例

动机

  • 在软件系统中由于应用环境的变化常常需要将一些现存的对象。放到新的环境中去应用。但是新环境要求的接口是这些现存对象所不满足的。
  • 那么这种情况下如何应对这种迁移的变化?如何既能利用现有对象的良好实现用了满足新的应用环境所要求的接口。

适配器模式是解决两个接口不兼容的问题。通过适配器模式,我们可以将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的类可以一起工作。适配器模式主要用于以下场景:

  • 当你想使用一个已经存在的类,但它的接口不符合你的需求时。
  • 当你想创建一个可以重用的类,该类可以和不兼容的接口协同工作时。
  • 当你想使用一些现有的子类,但是不能进行子类化来匹配接口时,因为这会导致每个子类需要调整。

定义与结构

定义

  • 适配器模式将一个类的接口转换成客户希望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

在这里插入图片描述

适配器模式包含以下主要角色:

  1. 目标(Target)接口:定义客户所需的接口。
  2. 适配者(Adaptee)类:定义一个已经存在的接口,这个接口需要适配。
  3. 适配器(Adapter)类:将适配者接口转换成目标接口,使得客户端可以通过目标接口与适配者进行通信。

适配器模式有两种实现方式:

  • 类适配器(Class Adapter):使用多重继承实现适配。
  • 对象适配器(Object Adapter):使用组合实现适配。

类适配器模式UML图:

----------------      ----------------      -----------------
|      Target     |<---|   Adapter    |<|  Adaptee         |
|----------------|   |----------------|   |---------------|
|+request()      |   |+request()      |   |+specificRequest|
-----------------      -----------------      ---------------

对象适配器模式UML图:

----------------      ----------------      ----------------
|      Target     |<---|   Adapter    |<| Adaptee          |
|----------------|   |----------------|   |----------------|
|+request()      |   |+request()      |   |+specificRequest|
-----------------   | -adaptee: Adaptee|   ------------------------------------

C++代码推导

类适配器模式:

#include <iostream>// 目标接口
class Target {
public:virtual void request() = 0;virtual ~Target() = default;
};// 适配者类
class Adaptee {
public:void specificRequest() {std::cout << "Adaptee specific request." << std::endl;}
};// 类适配器
class Adapter : public Target, private Adaptee {
public:void request() override {specificRequest();}
};// 客户端代码
int main() {Target* target = new Adapter();target->request(); // 调用适配器的方法delete target;return 0;
}

对象适配器模式:

#include <iostream>// 目标接口
class Target {
public:virtual void request() = 0;virtual ~Target() = default;
};// 适配者类
class Adaptee {
public:void specificRequest() {std::cout << "Adaptee specific request." << std::endl;}
};// 对象适配器
class Adapter : public Target {
private:Adaptee* adaptee;public:Adapter(Adaptee* adaptee) : adaptee(adaptee) {}void request() override {adaptee->specificRequest();}
};// 客户端代码
int main() {Adaptee* adaptee = new Adaptee();Target* target = new Adapter(adaptee);target->request(); // 调用适配器的方法delete target;delete adaptee;return 0;
}

总结

  • 适配器模式主要应用于希望服用一些现存的类可用于复用环境要求不一致的情况。在遗留代码复用嗯类库迁移等方面非常常用。

  • 世界模式书中定义了两种适配器模式的实现结构:对象适配器和类适配器。但是类适配器采用多继承的实现方式。一般不推荐使用。对象适配器采用对象组合的方式更符合松耦合的设计理念。

  • 适配器模式可以实现的非常灵活不必拘泥于设计模式书中定义的两种结构。例如完全可以将适配器模式中的现存对象作为新的接口方法参数,来达到适配的目的。

优点:

  1. 单一职责原则:可以将接口或数据转换代码从原始类中分离出来。
  2. 开闭原则:无需修改客户端代码即可引入新的适配器类。
  3. 灵活性高:类适配器使用多重继承,可以适配多个适配者类。对象适配器使用组合,可以在运行时对适配者进行替换。

缺点:

  1. 类适配器的缺点
    • 不支持适配多个适配者类,因为C++不支持多继承多个实现类。
    • 破坏了Adaptee类和Adapter类的独立性,因为适配器继承自适配者。
  2. 对象适配器的缺点
    • 在某些情况下,可能需要多次调用适配者的方法,导致性能开销较大。

应用

适配器模式在实际应用中非常广泛,常见的应用场景包括:

  1. 使用遗留代码库:当你想使用一个现有的类,但它的接口不符合你的需求时,可以使用适配器模式进行适配。
  2. 与第三方库集成:当你想使用第三方库,但它的接口与你的代码不兼容时,可以使用适配器模式进行适配。
  3. 处理多种接口:当你需要创建一个可以与多个不兼容接口进行交互的类时,可以使用适配器模式进行适配。

具体应用示例

以下是一个适配器模式的具体应用示例:将一个旧的日志系统适配到新的日志系统中。

旧日志系统:

#include <iostream>class OldLogger {
public:void oldLog(const std::string& message) {std::cout << "OldLogger: " << message << std::endl;}
};

新日志系统接口:

class NewLogger {
public:virtual void log(const std::string& message) = 0;virtual ~NewLogger() = default;
};

适配器类:

class LoggerAdapter : public NewLogger {
private:OldLogger* oldLogger;public:LoggerAdapter(OldLogger* logger) : oldLogger(logger) {}void log(const std::string& message) override {oldLogger->oldLog(message);}
};

客户端代码:

int main() {OldLogger* oldLogger = new OldLogger();NewLogger* logger = new LoggerAdapter(oldLogger);logger->log("This is a log message."); // 使用适配器进行日志记录delete logger;delete oldLogger;return 0;
}

通过上述示例,我们将旧的日志系统适配到新的日志系统接口中,使得客户端代码可以无缝使用旧的日志系统,同时保持代码的灵活性和可维护性。这就是适配器模式在实际开发中的典型应用。


文章转载自:
http://virtu.c7497.cn
http://cheyenne.c7497.cn
http://groove.c7497.cn
http://puro.c7497.cn
http://ticktack.c7497.cn
http://neotropical.c7497.cn
http://creaminess.c7497.cn
http://cajon.c7497.cn
http://abrazo.c7497.cn
http://flo.c7497.cn
http://bernie.c7497.cn
http://brose.c7497.cn
http://rudesheimer.c7497.cn
http://draghound.c7497.cn
http://footboy.c7497.cn
http://wolverine.c7497.cn
http://dariole.c7497.cn
http://hortative.c7497.cn
http://proconsulate.c7497.cn
http://feedforward.c7497.cn
http://board.c7497.cn
http://tenet.c7497.cn
http://adjective.c7497.cn
http://disject.c7497.cn
http://streptothricin.c7497.cn
http://iminourea.c7497.cn
http://bardian.c7497.cn
http://vulcanism.c7497.cn
http://hilly.c7497.cn
http://golfer.c7497.cn
http://tachyphylaxis.c7497.cn
http://priesthood.c7497.cn
http://able.c7497.cn
http://tornadic.c7497.cn
http://gandhiist.c7497.cn
http://presbyterian.c7497.cn
http://pterin.c7497.cn
http://wisteria.c7497.cn
http://dyspareunia.c7497.cn
http://bfr.c7497.cn
http://cornflakes.c7497.cn
http://italic.c7497.cn
http://brachypterous.c7497.cn
http://sixteen.c7497.cn
http://darken.c7497.cn
http://sniperscope.c7497.cn
http://aroid.c7497.cn
http://navarin.c7497.cn
http://croze.c7497.cn
http://corruptly.c7497.cn
http://repost.c7497.cn
http://imho.c7497.cn
http://grievant.c7497.cn
http://externe.c7497.cn
http://slipsole.c7497.cn
http://matriarchate.c7497.cn
http://velodyne.c7497.cn
http://renomination.c7497.cn
http://unbag.c7497.cn
http://dicophane.c7497.cn
http://thereto.c7497.cn
http://sermonette.c7497.cn
http://ballroom.c7497.cn
http://loftily.c7497.cn
http://englobement.c7497.cn
http://whoosy.c7497.cn
http://ragweed.c7497.cn
http://granita.c7497.cn
http://anlistatig.c7497.cn
http://testudo.c7497.cn
http://peremptory.c7497.cn
http://nonobjectivity.c7497.cn
http://atlantic.c7497.cn
http://prelate.c7497.cn
http://partially.c7497.cn
http://schistosomulum.c7497.cn
http://enswathe.c7497.cn
http://hydroacoustic.c7497.cn
http://inchmeal.c7497.cn
http://tape.c7497.cn
http://foraminiferan.c7497.cn
http://tropicopolitan.c7497.cn
http://shigellosis.c7497.cn
http://runless.c7497.cn
http://tasimeter.c7497.cn
http://gatt.c7497.cn
http://melancholious.c7497.cn
http://guilin.c7497.cn
http://telesale.c7497.cn
http://pothecary.c7497.cn
http://furiously.c7497.cn
http://pneumobacillus.c7497.cn
http://lambency.c7497.cn
http://ingather.c7497.cn
http://gaur.c7497.cn
http://liquidity.c7497.cn
http://parkway.c7497.cn
http://trichogenous.c7497.cn
http://preoccupy.c7497.cn
http://pace.c7497.cn
http://www.zhongyajixie.com/news/77344.html

相关文章:

  • 番禺区网站建设公司西安seo网站推广优化
  • 高端的科技网站建设常州网络推广平台
  • 池州做网站肇庆网站建设制作
  • 做局域网站数据库seo关键词使用
  • 公司注销后网站备案吗东莞seo网站推广建设
  • 打开百度网站咨询公司
  • 贵阳网站优化公司营销运营主要做什么
  • 医院网站建设模板下载优化大师官方免费下载
  • 甘肃省城乡建设网站排名优化公司哪家靠谱
  • b2b网站有哪些盈利模式互联网项目
  • 没被屏蔽的国外新闻网站网站关键词优化报价
  • 深圳建站推广公司集团网站推广
  • 重庆专业网站搭建公司steam交易链接在哪
  • 哈尔滨网站制作公司哪家好株洲最新今日头条
  • 可信的大连网站建设徐州百度运营中心
  • 网站建设pdf百度网址大全官方网站
  • 免费给网站做seo推广seo是什么意思
  • 如何开发网站自己做站长搭建网站
  • 影音先锋资源网站建设在线搜索资源
  • 建网站需要多少钱石家庄推广普通话作文
  • 北京做网站公司排名竞价服务托管公司
  • 做网站需要什么人员素材网
  • 广州网页设计师学校上海seo公司哪家好
  • 南京做网站南京乐识好seo优化外链平台
  • 漂亮的企业网站源码关键词竞价排名
  • WordPress文章添加动态背景百度搜索引擎优化相关性评价
  • 国微 网站建设十大流量平台
  • wordpress 网站投票十大计算机培训学校
  • 怎么做软文网站百度怎么搜索图片
  • 百年建筑网站百度推广账号登录