设计模式之结构型模式(适配器模式、桥接模式、装饰模式)

本文详细介绍了软件设计中的三种结构型模式:适配器模式、桥接模式和装饰模式。适配器模式用于转换接口以使不兼容的类能够一起工作,桥接模式用于分离抽象和实现,允许两者独立变化,装饰模式则用于动态地给对象添加新功能。这三种模式在软件设计中提供了灵活性和可扩展性。
摘要由CSDN通过智能技术生成

1、结构型模式

描述如何将类或者对象结合在一起行成更大的结构,就像搭积木,可以通过简单的积木的组合行成复杂的、功能更为强大的结构。

结构型模式可以分为:类结构型模式对象结构型模式

  • 类结构型模式关心类的组合,由多个类可以组成一个更大的系统,在类结构型模式中一般只存在继承关系和实现关系。
  • 对象结构型模式关心类与对象的组合,通过关联关系使得在一个类中定义另一个类的实例对象,然后通过该对象调用其方法。

根据“合成复用原则”,在系统中尽量使用关联关系替代继承关系,因此大部分结构型模式都是对象结构型模式。

包含:
适配器模式(Adapter)
桥接模式(Bridge)
装饰模式(Decorator)
外观模式(Facade)
享元模式(Flyweight)
代理模式(Proxy)


2、适配器模式

2.1 定义

在现实生活总中,经常出现两个对象因接口不兼容不能一起工作的实例,这时需要第三者进行适配。如:翻译、电源适配器、读卡器。

在软件设计中也可能出现:需要开发具有某种业务功能的组件在现有的组件库中已经存在,但它们与当前系统的接口规范不兼容,如果重新开发这些组建成本又很高,这时用适配器模式能很好地解决这些问题。

适配器模式:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式分为类结构型模式和对象结构型模式两种,前者类之间的耦合度比后者高,且要求程序员了解现有组件库中相关组件的内部结构,所以应用相对较少些。

2.2 模式结构
  • 目标接口:当前系统业务所期待的接口,它可以是抽象类或接口。
  • 适配者类:它是被访问和适配的现存组件库中的组件接口。
  • 适配器类:它是一个转换器,通过继承或则引用适配者的对象,把适配者接口转换成目标接口,让客户按目标接口的格式访问适配者。

类适配器:
在这里插入图片描述

对象适配器:
在这里插入图片描述

2.3 C++代码
#include <iostream>
#include <string>
using namespace std;

//目标接口
class Target 
{
   
public:
	virtual void request() = 0;
};

//适配者接口
class Adaptee
{
   
public:
	void specificRequest() 
	{
   
		cout << "适配者中的业务代码被调用!" << endl;
	}
};

//类适配器
class ClassAdapter :public Target,private Adaptee
{
   
public:
	void request()
	{
   
		specificRequest();
	}
};

//客户端代码
class  ClassAdapterTest
{
   
public:
	static void main() 
	{
   
		cout << "类适配器模式测试:";
		Target *target = new ClassAdapter();
		target->request();
	}
};

//对象适配器
class ObjectAdapter:public Target
{
   	
private:   
	Adaptee *adaptee;
public:
	ObjectAdapter(Adaptee *adaptee) 
	{
   
		this->adaptee = adaptee;
	}
	~ObjectAdapter(){
    delete adaptee; }
	void request() 
	{
   
		adaptee->specificRequest();
	}
};

//客户端代码
class ObjectAdapterTest
{
   
public:
	static void main()
	{
   
		cout << "对象适配器模式测试:";
		Adaptee *adaptee = new Adaptee();
		Target *target = new ObjectAdapter(adaptee);
		target->request();
		delete adaptee, target;
	}
};

int main()
{
   
	ClassAdapterTest *cat = new ClassAdapterTest();
	cat->main();
	ObjectAdapterTest *oat = new ObjectAdapterTest();
	oat->main();
	return 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值