首页 > 其他分享 >结构性设计模式-适配器模式的优缺点

结构性设计模式-适配器模式的优缺点

时间:2023-12-16 18:02:36浏览次数:27  
标签:cout 适配器 优缺点 接口 PowerAdapter 设计模式 public Target

把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法一起工作的两个类能够在一起工作。

  • 类的适配器模式
  • 对象的适配器模式
  1. 对象适配器

结构性设计模式-适配器模式的优缺点_设计模式

在上图中可以看出:

  • 冲突:

Target 期待调用 Request 方法,而 Adaptee 并没有(这就是所谓的不兼容了)。

  • 解决方案:

为使 Target 能够使用 Adaptee 类里的 SpecificRequest 方法 **,故提供一个中间环节 Adapter 类,把 Adaptee 的 API 与 Target 的 API 衔接起来 **(适配)


示例代码场景:

各个地方的家庭用电不同,插座的电压不同;需要接适配器后适应不同的电压;

比如手机充电不可能进入手机中的电压是220V吧。所以适配器就发挥乐重要作用


插座类
class Plug
{
public:
	Plug() {
		cout << "Plug构造函数" << endl;
	}

	virtual ~Plug() {
		cout << "Plug析构函数" << endl;
	}

	virtual int outputV() = 0;
};

//国内插座需要220V
class Myplug:public Plug
{
public:
	Myplug() {
		cout << "Myplug构造函数" << endl;
	}

	~Myplug() {
		cout << "Myplug析构函数" << endl;
	}

	int outputV() override {
		return getOutput220V();
	}

	int getOutput220V(void) {

		return 220;
	}
};

目标类 有5V电压的接口
class Target
{
public:
	Target(){
		cout << "Target构造函数" << endl;
	}
	virtual ~Target(){
		cout << "Target析构函数" << endl;
	}
	//基类纯虚函数接口,子类负责重写
	virtual int getOutput5V() = 0;
};

电源适配器类,用于适配不同的电压
class PowerAdapter:public Target
{
public:
	PowerAdapter() {
		cout << "PowerAdapter构造函数" << endl;
	}
	~PowerAdapter() {
		cout << "PowerAdapter析构函数" << endl;
	}

	//多态接口,基类指针指向子类
	void setPlug(Plug* plug) {

		this->plug_ = plug;
	}
	
	//适配器处理适配的业务逻辑
	int getOutput5V() override {

		int v = plug_->outputV();
		int div = v / 5;

		cout << "适配器开始工作 " << endl;
		cout << v << " change " << v / div << endl;
		cout << "现在的电压为: ";
		return  v / div;
	}

private:

	Plug* plug_=nullptr;
};

main函数入口

int main()
{
	Myplug* myPlug = new Myplug;
	PowerAdapter* powerAdapter = new PowerAdapter;

	powerAdapter->setPlug(myPlug);
	cout << powerAdapter->getOutput5V() << endl;

	delete myPlug;
	myPlug = nullptr;
	delete powerAdapter;
	powerAdapter = nullptr;

	return 0;
}

结构性设计模式-适配器模式的优缺点_设计模式_02


  1. 类适配器

适配器类继承需求接口和适配者,然后重新实现需求接口,在需求接口中调用适配者提供的接口

C++多继承的使用
class PowerAdapter :public Target, public Myplug
{
public:
	PowerAdapter() {
		cout << "PowerAdapter构造函数" << endl;
	}
	~PowerAdapter() {
		cout << "PowerAdapter析构函数" << endl;
	}


	//适配器处理适配的业务逻辑
	int getOutput5V() override {

		int v = outputV();
		int div = v / 5;

		cout << "适配器开始工作 " << endl;
		cout << v << " change " << v / div << endl;
		cout << "现在的电压为: ";
		return  v / div;
	}

private:

	Plug* plug_ = nullptr;
};

int main()
{

	PowerAdapter* powerAdapter = new PowerAdapter;
	cout << powerAdapter->getOutput5V() << endl;

	delete powerAdapter;
	powerAdapter = nullptr;

	return 0;
}

结构性设计模式-适配器模式的优缺点_C++类与对象_03

总结:

优点:

  • ·能提高类的透明性和复用性,现有的类会被复用但不需要改变。
  • ·目标类和适配器类解耦,可以提高程序的扩展性。
  • ·在一般业务场景中符合开闭原则。

缺点:

  • ·在适配器代码编写过程中需要进行全面考虑,可能会增加系统复杂度。
  • ·增加代码阅读难度,过多使用适配器会使系统代码变得凌乱。




标签:cout,适配器,优缺点,接口,PowerAdapter,设计模式,public,Target
From: https://blog.51cto.com/u_15172160/8853333

相关文章

  • 设计模式:程序员的秘密武器(高手必备)
    在过去的几十年的职业生涯中,我观察到许多同事在技术方面取得了显著的进步和能力提升。然而,随着时间的推移,他们似乎逐渐遇到了一个发展的瓶颈。尽管大家都渴望以最快的速度提升自己的技能水平,但他们忽视了一个关键的因素,那就是内功修炼。是的,我相信大家都知道我们所说的内功心法指......
  • 设计模式:程序员的秘密武器(高手必备)
    在过去的几十年的职业生涯中,我观察到许多同事在技术方面取得了显著的进步和能力提升。然而,随着时间的推移,他们似乎逐渐遇到了一个发展的瓶颈。尽管大家都渴望以最快的速度提升自己的技能水平,但他们忽视了一个关键的因素,那就是内功修炼。是的,我相信大家都知道我们所说的内功心法指......
  • 适配器模式揭秘:让不兼容的组件完美协同
    前言从这篇文章开始来盘一盘结构型设计模式,在开始之前先来简单回顾一下创建型的设计模式有哪些,如果有兴趣,就来一起学习吧:设计模式之简单工厂模式工厂方法模式:改变你对软件开发的认知_凡夫编程的技术博客_51CTO博客抽象工厂模式:角色解析与应用探索_凡夫编程的技术博客_51CTO博客设计......
  • 模拟适配器设计方案:360-基于10G以太网的模拟适配器
    基于10G以太网的模拟适配器一、产品概述   基于10G以太网的模拟适配器是一款分布式高速数据采集系统,实现多路AD的数据采集,并通过10G以太网光纤远距离传输到存储计算服务器,计算控制指令能通过光纤返回给数据卡进行IO信号控制。产品基于10G太网络,可迅速构建起......
  • 小谈设计模式(21)—迭代器模式
    (小谈设计模式(21)—迭代器模式)专栏介绍主要对目前市面上常见的23种设计模式进行逐一分析和总结,希望有兴趣的小伙伴们可以看一下,会持续更新的。希望各位可以监督我,我们一起学习进步,加油,各位。迭代器模式迭代器模式是一种行为型设计模式,它提供了一种访问聚合对象中各个元素的方法......
  • 写写我认知中的设计模式
    创建型我印象最深刻的就是单例模式,我记得他有一个特别经典的案例:任务管理器;而且我对这个模式的印象也比较深刻:将创建方法私有化,意味着不可以再次创建对象,仅对对象的调用。最近有所感悟的是生成器模式,其实上次软考的学习中我唯一不理解的就是生成器模式,当时听zst2003老师讲,一头雾......
  • Python实现软件设计模式2:工厂方法模式
    特点工厂存在父类和子类,产品存在父类和子类。工厂父类负责定义创建产品对象的公共接口,工厂子类负责生成具体的产品对象。包含的角色Product抽象产品ConcreteProduct具体产品Factory抽象工厂ConcreteFactory具体工厂模式分析工厂方法模式是简单工厂模式的进......
  • 适配器模式
    适配器模式分为类适配器和对象适配器。适配器有三个角色,一个是目标(Target),一个是被适配者,一个是适配者。类适配器和对象适配器的区别是,类适配器是适配者继承目标(Targer)的同时也实现被适配者的抽象接口,对象适配器是适配者只继承目标(Targer),适配者内会有一个被适配者对象。示例代......
  • 关于设计模式
    一、设计原则:保留不变的部分,抽取变化的部分面向接口编程多用组合,少用继承对拓展开放,对修改关闭二、设计模式1、策略模式利用多态,将变化的部分抽象成一个接口,针对该接口有不同的实现2、观察者模式主题接口和观察者接口主题维护观察者的增加、删除、通知;3、装饰者模式......
  • 软件设计模式需要考虑的原则
    1.单一职责原则(SRP,SingleResponsibilityPrinciple)一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。职责分离,提升模块的可复用性,SRP是实现高内聚、低耦合的指导方针。2.开闭原则(OCP,Open-ClosedPrinciple)软件实体应该对扩展开放,对修改关闭。表示软件实体......