双向适配器
实现一个双向适配器,使得猫可以学狗叫,狗可以学猫抓老鼠。
类图
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; }
运行截图