软件设计适配器模式

双向适配器
实现一个双向适配器,使得猫可以学狗叫,狗可以学猫抓老鼠。

类图

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;
}

运行截图

原文地址:https://www.cnblogs.com/Arisf/p/15685587.html