3、Socket网络通信的设计与实现------类适配器

除了对象适配器模式之外。适配器模式另一种形式。那就是类适配器模式,类适配器模式和对象适配器模式最大的差别在于适配器和适配者之间的关系不同,对象适配器模式中适配器和适配者之间是关联关系,而类适配器模式中适配器和适配者是继承关系。无论是对象适配器还是类适配器。都是为了复用适配者类的功能。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQXBlTGlmZQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" style="color:rgb(255,0,0); line-height:26px; font-size:18px; font-family:SimSun">

SocketPackage就是成熟的套接字软件包,也就是Adaptee适配者类。包括创建套接字、绑定套接字、监听套接字、连接套接字等成熟方法。 Socket是目标抽象类Target,定义了客户希望的方法; SocketAdapter为适配器类,继承自Socket类和SocketPackage类。将成熟软件包里面的方法转为Socket类中客户希望的方法。

成熟的套接字软件包实现代码例如以下:

#ifndef _SOCKET_PACKAGE_H_
#define _SOCKET_PACKAGE_H_ #include <iostream>
#include <string>
using namespace std; //套接字包(能够被复用)
class SocketPackage
{
public:
void CreateSpecificSocket()
{
cout << "创建套接字" << endl;
} void BindSpecificSocket()
{
cout << "绑定套接字" << endl;
} void ListenSpecificSocket()
{
cout << "监听套接字" << endl;
} void ConnecSpecifictSocket()
{
cout << "连接套接字" << endl;
} }; #endif

SocketAdapter套接字适配器类和SocketPackage套接字包类不在是组合的关系,SocketAdapter继承于Socket类和SocketPackage,当调用SocketAdapter套接字适配器类中的方法。将会调用其基类SocketPackage的对应方法,通过继承的方式实现对适配者类的功能复用。

    套接字适配器类实现代码例如以下:

#ifndef _SOCKET_H_
#define _SOCKET_H_ #include "SocketPackage.h" //抽象套接字类
class Socket
{
public:
//创建套接字
virtual void CreateSocket() = 0; //绑定套接字
virtual void BindSocket() = 0; //监听套接字
virtual void ListenSocket() = 0; //连接套接字
virtual void ConnectSocket() = 0;
}; //套接字适配器(类适配器)
class SocketAdapter : public Socket, SocketPackage
{
public: //创建套接字
void CreateSocket()
{
CreateSpecificSocket();
} //绑定套接字
void BindSocket()
{
BindSpecificSocket();
} //监听套接字
void ListenSocket()
{
ListenSpecificSocket();
} //连接套接字
void ConnectSocket()
{
ConnecSpecifictSocket();
}
}; #endif

測试程序实现代码例如以下:

#include <iostream>
#include "Socket.h" using namespace std; int main()
{
//创建套接字适配器对象
Socket * pSocketAdapter = new SocketAdapter(); //使用适配器进行套接字操作
pSocketAdapter->CreateSocket();
pSocketAdapter->BindSocket();
pSocketAdapter->ListenSocket();
pSocketAdapter->ConnectSocket(); //销毁操作
delete pSocketAdapter;
pSocketAdapter = NULL; return 0;
}

编译并运行,程序结果例如以下:



    适配器类继承于目标抽象类和适配者类。当调用适配器类的方法时。在该方法内部将调用其基类,也就是适配者类中对应的方法。通过继承的方式。实现复用适配者类的功能。

无论是对象适配器还是类适配器,都是为了实现功能的复用。

C++设计模式之适配器模式(二)的更多相关文章

  1. Java设计模式(十二) 策略模式

    原创文章,同步发自作者个人博客,http://www.jasongj.com/design_pattern/strategy/ 策略模式介绍 策略模式定义 策略模式(Strategy Pattern) ...

  2. C#设计模式(7)——适配器模式(Adapter Pattern)

    一.引言 在实际的开发过程中,由于应用环境的变化(例如使用语言的变化),我们需要的实现在新的环境中没有现存对象可以满足,但是其他环境却存在这样现存的对象.那么如果将“将现存的对象”在新的环境中进行调用 ...

  3. C#设计模式之七适配器模式(Adapter)【结构型】

    一.引言   从今天开始我们开始讲[结构型]设计模式,[结构型]设计模式有如下几种:适配器模式.桥接模式.装饰模式.组合模式.外观模式.享元模式.代理模式.[创建型]的设计模式解决的是对象创建的问题, ...

  4. 桥接模式 桥梁模式 bridge 结构型 设计模式(十二)

      桥接模式Bridge   Bridge 意为桥梁,桥接模式的作用就像桥梁一样,用于把两件事物连接起来   意图 将抽象部分与他的实现部分进行分离,使得他们都可以独立的发展.  意图解析 依赖倒置原 ...

  5. C#设计模式之六适配器模式(Adapter Pattern)【结构型】

    一.引言 从今天开始我们开始讲[结构型]设计模式,[结构型]设计模式有如下几种:适配器模式.桥接模式.装饰模式.组合模式.外观模式.享元模式.代理模式.[创建型]的设计模式解决的是对象创建的问题,那[ ...

  6. C#设计模式(7)——适配器模式(Adapter Pattern)(转)

    一.引言 在实际的开发过程中,由于应用环境的变化(例如使用语言的变化),我们需要的实现在新的环境中没有现存对象可以满足,但是其他环境却存在这样现存的对象.那么如果将“将现存的对象”在新的环境中进行调用 ...

  7. JAVA学习笔记--策略设计模式与适配器模式

    一.策略设计模式 创建一个能够根据所传递对象的不同而具有不同行为的方法被称为策略设计模式:这类方法包含所要执行的算法中固定不变的部分,而“策略”包含变化的部分.策略就是传递进去的参数对象,它包含要执行 ...

  8. C#设计模式(7)——适配器模式

    一.概述 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作. 二.模型 三.代码实现 using System; /// 这里以 ...

  9. 大型Java进阶专题(八)设计模式之适配器模式、装饰者模式和观察者模式

    前言 ​ 今天开始我们专题的第八课了.本章节将介绍:三个设计模式,适配器模式.装饰者模式和观察者模式.通过学习适配器模式,可以优雅的解决代码功能的兼容问题.另外有重构需求的人群一定需要掌握装饰者模式. ...

随机推荐

  1. POJ-1200-Crazy Search(字符串Hash)

    Crazy Search Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 33142 Accepted: 9079 Descrip ...

  2. 网络设置命令--ifconfig.setup

    ifconfig命令 作用:用于显示以及设置当前活动网卡信息 一.  显示当前活动网卡信息 ifconfig 从上面可以看到当前主要有2块活动网卡,eth0:代表当前本地真实网卡 lo:代表回访网卡, ...

  3. API对接中经常会出现的签名获取,这只是某一种,仅供给有需要的人参考

    要求: 1.对所有传入参数(含系统参数和接口参数)按照字段名的 ASCII 码从小到大排序(字典序)后,使用 URL 键值对的格式.(即 key1=value1&key2=value2…)拼接 ...

  4. Oracle 11G RAC For ASM 利用RMAN COPY进行存储迁移

    转载请注明出处 一.需求背景 客户数据库存储空间接近存满,需购置一台新的存储,进行数据迁移,客户允许少量停机时间. 二.实施方法讨论 利用ASM rebalance 进行迁移 可以实现0宕机进行迁移, ...

  5. vue 项目规范

    1, 组件化 2, css 分清单独和通用的 3, 封装请求 4, 命名原则 1: 尽量和后端保持一致 2: 简单常见的单词 3: 全部小写

  6. 剑指Offer(书):删除链表的节点

    题目:在O(1)的时间内删除列表节点. /** * 步骤: * 1.检查head与removeNode节点是否为空 * 2.检查removeNode的后一个节点是否为空,不为空则使用后一个节点的值覆盖 ...

  7. Nginx安装及基本配置

    本文内容: 90%来自以下网址:http://www.nginx.cn/install ,修改了一些版本信息 10%来自以下网址:http://nginx.org/en/docs/beginners_ ...

  8. Python+selenium(Autolt实现上传)

    AutoIt是一个使用类似BASIC脚本语言的免费软件,被设计用来进行Windows GUI的自动化测试.它利用模拟键盘按键,鼠标移动和窗口/控件的组合来实现自动化任务. 此次小编介绍的是利用Auto ...

  9. Codeforces Round #211 (Div. 2)-D. Renting Bikes,二分!感谢队友出思路!

    D. Renting Bikes 读懂题后一开始和队友都以为是贪心.可是贪心又怎么贪呢..我们无法确定到底能买多少车但肯定是最便宜的前x辆.除了公共预算每个人的钱只能自己用,也无法确定每个人买哪一辆车 ...

  10. 【判连通】HDU 6113 度度熊的01世界

    http://acm.hdu.edu.cn/showproblem.php?pid=6113 [题意] 度度熊是一个喜欢计算机的孩子,在计算机的世界中,所有事物实际上都只由0和1组成. 现在给你一个n ...