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



浙公网安备 33010602011771号