软件设计-适配器模式
双向适配器
实现一个双向适配器,使得猫可以学狗叫,狗可以学猫抓老鼠。
类图
java
package rjsj.no8; public class DogImpl implements IDog{ @Override public void wang() { System.out.println("狗汪汪叫"); } }
package rjsj.no8; public interface ICat { public void eat(); }
package rjsj.no8; public interface IDog { public void wang(); }
package rjsj.no8; public class Adapter implements ICat,IDog{ private IDog DogImpl = null; private ICat CatImpl = null; public Adapter(IDog DogImpl,ICat CatImpl){ this.DogImpl = DogImpl; this.CatImpl = CatImpl; } @Override public void eat() { System.out.println("èģ·¢); DogImpl.wang(); } @Override public void wang() { System.out.println("¹·ģ·¢); CatImpl.eat(); } }
package rjsj.no8; public class CatImpl implements ICat{ @Override public void eat() { System.out.println("èץÀϊ } }
package rjsj.no8; public class Client { public static void main(String[] args) { Adapter adapter = new Adapter(new DogImpl(),new CatImpl()); adapter.eat(); System.out.println("**************"); adapter.wang(); } }
C++
#include <iostream> #include <string> using namespace std; class Cat{ public: virtual void catlook(){} virtual void catchM(){} }; class Dog{ public: virtual void doglook(){} virtual void wang(){} }; class CatImpl:public Cat{ public: void catlook(){ cout<<"猫!"<<endl; } void catchM(){ cout<<"抓老鼠!"<<endl; } }; class DogImpl:public Dog { public: void doglook(){ cout<<"狗!"<<endl; } void wang(){ cout<<"汪汪叫!"<<endl; } }; class Adapter : public Cat,Dog{ private: Dog *DogImpl; Cat *CatImpl; public: Adapter(Dog *DogImp,Cat *CatImp){ DogImpl=DogImp; CatImpl=CatImp; } virtual void doglook(){ cout<<"狗模仿"; CatImpl->catlook(); } virtual void wang(){ CatImpl->catchM(); } virtual void catlook(){ cout<<"猫模仿"; DogImpl->doglook(); } virtual void catchM(){ DogImpl->wang(); } }; int main(){ DogImpl *DogImp=new DogImpl(); CatImpl *CatImp=new CatImpl(); Adapter *adapter = new Adapter(DogImp,CatImp); adapter->catlook(); adapter->catchM(); adapter->doglook(); adapter->wang(); return 0; }
运行截图
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本