C++设计模式之适配器模式(二)
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++设计模式之适配器模式(二)的更多相关文章
- Java设计模式(十二) 策略模式
原创文章,同步发自作者个人博客,http://www.jasongj.com/design_pattern/strategy/ 策略模式介绍 策略模式定义 策略模式(Strategy Pattern) ...
- C#设计模式(7)——适配器模式(Adapter Pattern)
一.引言 在实际的开发过程中,由于应用环境的变化(例如使用语言的变化),我们需要的实现在新的环境中没有现存对象可以满足,但是其他环境却存在这样现存的对象.那么如果将“将现存的对象”在新的环境中进行调用 ...
- C#设计模式之七适配器模式(Adapter)【结构型】
一.引言 从今天开始我们开始讲[结构型]设计模式,[结构型]设计模式有如下几种:适配器模式.桥接模式.装饰模式.组合模式.外观模式.享元模式.代理模式.[创建型]的设计模式解决的是对象创建的问题, ...
- 桥接模式 桥梁模式 bridge 结构型 设计模式(十二)
桥接模式Bridge Bridge 意为桥梁,桥接模式的作用就像桥梁一样,用于把两件事物连接起来 意图 将抽象部分与他的实现部分进行分离,使得他们都可以独立的发展. 意图解析 依赖倒置原 ...
- C#设计模式之六适配器模式(Adapter Pattern)【结构型】
一.引言 从今天开始我们开始讲[结构型]设计模式,[结构型]设计模式有如下几种:适配器模式.桥接模式.装饰模式.组合模式.外观模式.享元模式.代理模式.[创建型]的设计模式解决的是对象创建的问题,那[ ...
- C#设计模式(7)——适配器模式(Adapter Pattern)(转)
一.引言 在实际的开发过程中,由于应用环境的变化(例如使用语言的变化),我们需要的实现在新的环境中没有现存对象可以满足,但是其他环境却存在这样现存的对象.那么如果将“将现存的对象”在新的环境中进行调用 ...
- JAVA学习笔记--策略设计模式与适配器模式
一.策略设计模式 创建一个能够根据所传递对象的不同而具有不同行为的方法被称为策略设计模式:这类方法包含所要执行的算法中固定不变的部分,而“策略”包含变化的部分.策略就是传递进去的参数对象,它包含要执行 ...
- C#设计模式(7)——适配器模式
一.概述 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作. 二.模型 三.代码实现 using System; /// 这里以 ...
- 大型Java进阶专题(八)设计模式之适配器模式、装饰者模式和观察者模式
前言 今天开始我们专题的第八课了.本章节将介绍:三个设计模式,适配器模式.装饰者模式和观察者模式.通过学习适配器模式,可以优雅的解决代码功能的兼容问题.另外有重构需求的人群一定需要掌握装饰者模式. ...
随机推荐
- env - 在重建的环境中运行程序
SYNOPSIS(总览) env [OPTION]... [-] [NAME=VALUE]... [COMMAND [ARG]...] DESCRIPTION(描述) 设置环境中的每个NAME为VAL ...
- Graveyard LA3708
白书第一章例题4 思维. 先固定一点不动,假设最后一共N个点,那么编号为0,1,...N-1, 0不动,原来的n个点分别占据i/n*N的位置(记为pos),移动到pos四舍五入的位置即可. 证明一:有 ...
- 对faster rcnn代码讲解的很好的一个
http://www.cnblogs.com/houkai/p/6824455.html http://blog.csdn.net/u014696921/article/details/6032142 ...
- Spring JDBC 例子
http://www.yiibai.com/spring/spring_jdbc_example.html 要了解有关Spring JDBC框架与JdbcTemplate类的概念,让我们写这将实现所有 ...
- Mathematics-基础:1+2+3+……+n
设Sn=1+2+3+……+n-1+n则有Sn=n+n-1+……+3+2+1两式相加得2Sn=(n+1)+(n+1)+……+(n+1)2Sn=n×(n+1)Sn=n×(n+1)/2
- 清除oracle归档日志
清除oracle归档日志 1. 连接oracle报如下错误 ORA-00257: archiver error. Connect internal only, until freed 产生原因:出现O ...
- 模拟--P1540 机器翻译
题目连接 题目背景 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 题目描述 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单词 ...
- 剑指Offer(书):二叉树的下一个节点
题目:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 分析:若一个节点有右子树,那么他的下一个节点就是他右子树中 ...
- 图的最小生成树——Kruskal算法
Kruskal算法 图的最小生成树的算法之一,运用并查集思想来求出最小生成树. 基本思路就是把所有边从小到大排序,依次遍历这些边.如果这条边所连接的两个点在一个连通块里,遍历下一条边,如果不在,就把这 ...
- 64.JPA命名策略【从零开始学Spring Boot】
[从零开始学习Spirng Boot-常见异常汇总] 在(39.2). Spring Boot Shiro权限管理[从零开始学Spring Boot] 这一章节中有人碰到这样一个问题"导入的 ...