《《设计模式10》-适配器模式》由会员分享,可在线阅读,更多相关《《设计模式10》-适配器模式(11页珍藏版)》请在金锄头文库上搜索。
1、2.适配器模式(AdapterPattern)v两个不同的类A和B,接口不同,但又希望将A和B统一起来(将A当作B类使用,或将B当作A类使用)class Client public: void Use(A& aA);AA1A2A3B学生、教师例例v已有现成的两个类簇-Student和Teacher类簇;v希望创建一些新的实例-具有学生的功能,但这些功能又用到教师的功能;学生、教师classStudentpublic:virtualStudent();virtualvoid上课();virtualvoid休息();;classTeacherpublic:virtualTeacher();virt
2、ualvoid授课();virtualvoid玩();;1.学生可有本科生、硕士研究生、博士研究生等;2.现增加一类在职学生-本身也是教师。3.这时,在职学生的上课就是教师的授课;4.怎么才能将教师,当做学生来使用呢?问题v接口的不一致性v原接口的不可更改性v解决方式:类的适配器方式对象适配器方式类的适配器模式classStudentpublic:virtualStudent();virtualvoid上课()=0;virtualvoid休息()=0;;classTeacherpublic:virtualTeacher();virtualvoid授课();virtualvoid玩();;cla
3、ss在职学生:publicStudent,privateTeacherpublic:virtual在职学生();virtualvoid上课()授课();virtualvoid休息()玩();类适配器结构对象适配器方式classStudentpublic:virtualStudent();virtualvoid上课()=0;virtualvoid休息()=0;;classTeacherpublic:virtualTeacher();virtualvoid授课();virtualvoid玩();;class在职学生:publicStudentpublic:在职学生(Teacher*t):tc(t)
4、virtual在职学生();virtualvoid上课()tc.授课();virtualvoid休息()tc.玩();private:Teacher*tc;对象适配器结构适配器模式效果v在不改变原有类的前提下,调整原有类的接口v适用性:使用已有的类,但类的接口不符合需要;对象适配器,通常比类适配器更灵活;例某绘图程序已存在矩形(Rect)、椭圆(Ellipse)两种图形元素。现要将三角形(Triangle)图形元素加入该程序以实现功能扩充。已知某第三方类库中提供了XTriangle类,且完全满足程序新增的Triangle图形元素所需的功能,但XTriangle不是由Shape派生而来,而且由于缺少XTriangle类的源代码,不能从XTriangle类直接派生子类。classTriangle:publicShapepublic:Triangle():pXtriangle(newXTriangle)virtualTriangle()deletepXtriangle;virtualvoidDraw()pXTriangle-DrawIt();private:XTriangle*pXtriangle;