设计模式-适配器模式

学习笔记:适配器模式
模式简介

:属于结构型模式,是两个不兼容的接口之间的桥梁。

为什么用

:让两个独立的类的接口产生联系,本来A类和B类没关系,我在B类写个兼容的接口,让接口可以接受A类的对象,就能让B类的方法使用A类进行操作了。

怎么样用

:写个B类的适配器类,类里提供要适配的方法,A类继承并实现这个适配器的方法,在B类里,通过适配器调用A类实现的适配的方法。

注意事项

:只在特别需要的时候才用适配器,过多的使用,代码不好看。

实际举例

:创意工坊,游戏显示自定义的物品信息。

#include <iostream>
#include <Windows.h>
using namespace std;
//ShowTool对象提供的Adapter(适配器接口)。
class ShowToolAdapter {
public:
	virtual void showMessage(string message) {
		cout << "待实现的显示方法\n";
	};
};
/*ShowTool游戏显示工具使用showMessage方法就能显示DiyItem对象的信息
这需要DiyItem对象实现ShowTool的Adapter(适配器接口),即成为它的子类*/
class DiyItem_ShowToolAdapter :public ShowToolAdapter {
public:
	void showMessage(string message) {
		cout << "---自定义物品---\n";
		string text[] = { "武器","攻击","暴击率" };
		int tot = 0;
		cout << text[tot++] << ":";
		for (int i = 0; i < message.size(); ++i) {
			cout << message[i];
			if (message[i] == '\n') {
				cout << text[tot++] << ":";
			}
		}
		cout << "\n";
	};
};
//ShowTool游戏显示工具,用来显示对象的信息
class ShowTool {
	ShowToolAdapter *showToolAdapter;
public:
	//一开始只支持显示人物的信息
	void showMessage(string type,string message) {
		//游戏自带类型
		if (type == "人物") {
			string text[] = { "名字","血量","蓝量" };
			int tot = 0;
			cout << "---人物---\n";
			cout << text[tot++] << ":";
			for (int i = 0; i < message.size(); ++i) {
				cout << message[i];
				if (message[i] == '\n') {
					cout<< text[tot++] << ":";
				}
			}
			cout << "\n";
		}
		//在此添加新的类型
		else if (type == "自定义物品") {
			showToolAdapter = new DiyItem_ShowToolAdapter();
			showToolAdapter->showMessage(message);
		}
		else {
			cout << "---不支持---\n";
			cout << "该类型的信息不支持显示\n";
		}
	}
};
int main()
{
	//游戏显示工具
	ShowTool st;
	//游戏显示工具-只能显示人物(等已实现的类型)信息
	st.showMessage("人物","moota\n100\n100");
	//自定义物品不支持显示,就必须自己写适配器(已实现)
	st.showMessage("自定义物品","无尽之刃\n180\n25");
	//未写适配器的物品不支持显示
	st.showMessage("未知物品","22\n33");
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值