资源预览内容
第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
第9页 / 共11页
第10页 / 共11页
亲,该文档总共11页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
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();virtualvoid授课();virtualvoid玩();;1.学生可有本科生、硕士研究生、博士研究生等;2.现增加一类在职学生-本身也是教师。3.这时,在职学生的上课就是教师的授课;4.怎么才能将教师,当做学生来使用呢?问题v接口的不一致性v原接口的不可更改性v解决方式:类的适配器方式对象适配器方式类的适配器模式classStudentpublic:virtualStudent();virtualvoid上课()=0;virtualvoid休息()=0;;classTeacherpublic:virtualTeacher();virtualvoid授课();virtualvoid玩();;class在职学生:publicStudent,privateTeacherpublic:virtual在职学生();virtualvoid上课()授课();virtualvoid休息()玩();类适配器结构对象适配器方式classStudentpublic:virtualStudent();virtualvoid上课()=0;virtualvoid休息()=0;;classTeacherpublic:virtualTeacher();virtualvoid授课();virtualvoid玩();;class在职学生:publicStudentpublic:在职学生(Teacher*t):tc(t)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;
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号