Adapter模式

来源:互联网 发布:ios11.2 软件打不开 编辑:程序博客网 时间:2024/06/15 03:59

意图:

将一个类的接口转换成客户希望的另外一个接口,Adapter模式使原本由于接口不兼容而不能一起工作的类可以一起工作。

实例:

假设现在有一个图形绘制程序,有绘制与填充函数,此时定义一个公有的虚基类shape,并添加虚函数display与fill,当我要绘制正方形,从shape类派生出square类,要绘制线,从shape类中派生出line类。假设又要添加一个绘制圆的需求,我可以像前面一样继续派生出一个圆的类,但是此时有一个人已经写好了处理圆的这些操作的类,假设叫XXCircle类,但是它的命名方法跟我shape类中的这些命名方法不同。我不能直接使用XXCircle类,因为我想保持Shape类的多态行为,原因如下 1)因为XXCircle类中的方法,参数列表都不同       2)我不能直接派生XXCircle,因为它还必须从Shape派生。 我也不能直接修改XXCircle类,因为其他地方可能正在用这个类,这样要修改的地方太多。 这时候就体现出Adapter模式的用途了。


根据上面的需求,c++代码描述如下:

#include<iostream>#include<list>using namespace std;class Shape{public:Shape() {}~Shape() {}virtual void dispaly() = 0;virtual void fill() = 0;};class Square :public Shape{public:Square() {}~Square() {}void dispaly(){cout << "正方形的显示" << endl;}void fill(){cout << "正方形的填充" << endl;}};class Line :public Shape{public:Line() {}~Line() {}void dispaly(){cout << "线的显示" << endl;}void fill(){cout << "线的填充" << endl;}};class XXCircle{public:XXCircle() {}~XXCircle() {}void drawCircle(){cout << "XXCircle类圆的绘制方法" << endl;}void fillCircle(){cout<< "XXCircle类圆的填充方法" << endl;}};class Circle :public Shape{public:void dispaly(){myXXCircle.drawCircle();}void fill(){myXXCircle.fillCircle();}private:XXCircle myXXCircle;};int main(){Square *squ = new Square;Line *line = new Line;Circle *cir = new Circle;list<Shape*>shapeList;shapeList.push_back(squ);shapeList.push_back(line);shapeList.push_back(cir);for (auto p : shapeList){p->dispaly();p->fill();cout << endl;}system("pause");}
执行结果如下

效果:使原有对象能够适应新的结构,不受接口的限制。

实现:将原有类包含在另一个类之中。让包含类与需要的接口匹配,调用被包容类的方法。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 打到耳朵嗡嗡的怎么办 耳朵被打嗡嗡响怎么办 3岁儿童小鸡红肿怎么办 15个月宝宝呕吐怎么办 拔了导尿管尿不出来怎么办 2个月婴儿包茎怎么办 三岁宝宝有散光怎么办 两岁宝宝有包茎怎么办 3岁宝宝散光严重怎么办 手术后我抽烟了怎么办 鸡不吃食没精神怎么办 尿结石疼得厉害怎么办 龟头有水泡还痒怎么办 一岁宝宝嘴角烂怎么办 1岁宝宝嘴角烂了怎么办 4月宝宝嘴角烂了怎么办 4岁宝宝嘴角烂了怎么办 3个月宝宝长马牙怎么办 肛门旁边破了疼怎么办 借钱给朋友不还怎么办 pph手术后坠胀怎么办 中老年夜尿频繁怎么办 带状疮疹后期痒怎么办 阴茎上长珍珠疹怎么办 子宫大怎么办能变小吗 子宫前壁肌瘤5.4怎么办 7个月孕妇得疱疹怎么办 受风脸上起疙瘩怎么办 受风了起疙瘩怎么办 7个月宝宝肠炎怎么办 出水痘发烧39度怎么办 腰肌拉伤怎么办恢复快 过敏起大水泡了怎么办 身上长疱疹怎么办冶疗 刚怀孕长了疱疹怎么办 吃完饭恶心想吐怎么办 减肥药吃了心慌怎么办 吃多了恶心想吐怎么办 想吐怎么办最快最有效 想吐又吐不出来怎么办 3岁宝宝反胃呕吐怎么办