适配器模式--Adapter

如果要开发一个跨平台的语言或库,应该怎么做?

就像现在的跨平台语言Java和跨平台库Qt,但是这两种库有本质区别。

Java:一次编译,到处运行。需借助JVM运行

Qt:一次编写,到处编译。编译后可直接运行。

这里以Qt为例,如何做到一次编写,到处编译呢?各种平台提供的API未必一致,为什么还可以跨平台编译呢,猜测原因是因为Qt编译器对外提供了统一的借口,而实现中分别调用相应平台的API。这里,Qt编译器就相当于Adapter(适配器)


假设窗体要经过注册---创建---显示这3个步骤,下面通过适配器提供统一接口模拟跨平台:

mywindows.h

//模拟windows下面创建窗口的函数
#include <iostream>
using namespace std;

//注册windows窗口类
void regWindows()
{
	//里面为windows下面窗体类注册的具体执行过程
	cout<<"执行windows注册窗体类的代码"<<endl;
}

//创建windows窗体
void createWindows()
{
	//里面为windows下面创建窗体的具体执行过程
	cout<<"执行windows创建窗体对象的代码"<<endl;
}

//显示windows窗体
void showWindows()
{
	//里面为windows下面显示窗体的具体执行过程
	cout<<"执行windows窗体显示的具体代码"<<endl;
}

mylinux.h

//模拟Linux下面创建窗口的函数
#include <iostream>
using namespace std;

//注册Linux窗口类
void regLinux()
{
	//里面为Linux下面窗体类注册的具体执行过程
	cout<<"执行Linux注册窗体类的代码"<<endl;
}

//创建Linux窗体
void createLinux()
{
	//里面为Linux下面创建窗体的具体执行过程
	cout<<"执行Linux创建窗体对象的代码"<<endl;
}

//显示Linux窗体
void showLinux()
{
	//里面为Linux下面显示窗体的具体执行过程
	cout<<"执行Linux窗体显示的具体代码"<<endl;
}

myAdapter.h

#ifdef MYWINDOWS
#include "mywindows.h"
#else
#include "mylinux.h"
#endif

class MyWidgetAdapter
{
public:
	//适配器提供的注册
	void reg()
	{
#ifdef MYWINDOWS
		regWindows();
#else
		regLinux();
#endif
	}
	//适配器提供的创建
	void create()
	{
		#ifdef MYWINDOWS
		createWindows();
#else
		createLinux();
#endif
	}
	//适配器提供的显示
	void show()
	{
		#ifdef MYWINDOWS
		showWindows();
#else
		showLinux();
#endif
	}
};

模拟windows下的创建:

#define MYWINDOWS
#include "myAdapter.h"

/*
**通过适配器模式,模拟跨平台
**真实中,可能不需要MYWINDOWS,MYLINUX之类的宏来判断,根据不同操作系统上,编译器提供不同的库。
**库对外提供统一的借口,内部调用不同平台的API
*/
int main()
{
	MyWidgetAdapter w;
	w.reg();
	w.create();
	w.show();
}


模拟linux下的创建

#define MYLINUX
#include "myAdapter.h"

/*
**通过适配器模式,模拟跨平台
**真实中,可能不需要MYWINDOWS,MYLINUX之类的宏来判断,根据不同操作系统上,编译器提供不同的库。
**库对外提供统一的借口,内部调用不同平台的API
*/
int main()
{
	MyWidgetAdapter w;
	w.reg();
	w.create();
	w.show();
}



特别注意的是:适配器模式是无奈之举,是没有办法中的办法,就像windows和linux估计永远不会提供统一的API接口.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值