适配器模式
来源:互联网 发布:ubuntu16.04 caffe gpu 编辑:程序博客网 时间:2024/06/05 20:47
适配器模式:将一个类的接口,转换成客户期望的另一个接口。适配器让原本不兼容的类可以合作无间。
类图为:
举一个例子,客户需要一只鸭子(Target),但是手头只有一只火鸡(Adaptee),那么这只火鸡(Adaptee)就可通过适配器(Adapter)伪装成一只鸭子(Target)供客户使用。
看代码:
adapter.h
#pragma once#include <iostream>using namespace std;//鸭子基类class Duck{public:Duck() {}virtual ~Duck() {}virtual void quack() = 0;virtual void fly() = 0;};//绿头鸭class MallardDuck : public Duck{public:MallardDuck() {}~MallardDuck() {}void quack() { cout<<"Quack"<<endl; }void fly() { cout<<"I'm flying"<<endl;}};//火鸡基类class Turkey{public:Turkey() {}virtual ~Turkey() {}virtual void gobble() = 0;virtual void fly() = 0;};//街头火鸡class WildTurkey : public Turkey{public:WildTurkey() {}~WildTurkey() {}void gobble() { cout<<"Gobble gobble"<<endl; }void fly() { cout<<"I'm flying a short distance"<<endl;}};//适配器class TurkeyAdapter : public Duck{private:Turkey *turkey;public:TurkeyAdapter(Turkey *turkey) : turkey(turkey) {}~TurkeyAdapter() {}void quack() { turkey->gobble(); }void fly() { turkey->fly(); }};测试:
#include "adapter.h"#include <cstdlib>using namespace std;void testDuck(Duck *duck){duck->quack();duck->fly();}int main(){MallardDuck *duck = new MallardDuck();WildTurkey *turkey = new WildTurkey();Duck *turkeyAdapter = new TurkeyAdapter(turkey);cout<<"The Turkey says..."<<endl;turkey->gobble();turkey->fly();cout<<"The duck says..."<<endl;testDuck(duck);cout<<"The TurkeyAdapter says..."<<endl;testDuck(turkeyAdapter);system("pause");return 0;}结果:
0 0
- 适配器及适配器模式
- 适配器及适配器模式
- 适配器模式(类适配器)
- 适配器模式(默认适配器)
- 适配器模式(对象适配器)
- 适配器模式-类适配器
- 适配器模式-对象适配器
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- hadoop启动问题
- [矩阵乘法][最短路]无奈的学长
- C# 参考之方法参数关键字:params、ref及out
- 屏蔽兼容模式,防止浏览器改变影响页面
- MariaDB/Mysql之主从架构的复制原理及主从/双主配置详解(一)
- 适配器模式
- MySQL binlog
- 我们的下一代教育之一:认字篇
- Floodlight 用Static Flow Pusher 改变流表
- zookeeper3.4.6Linux单机部署
- C/C++除法实现方式及负数取模详解
- Oracle 学习笔记 16 -- 游标(PL/SQL)
- FL2440移植Linux内核
- Java反射实例