zoukankan      html  css  js  c++  java
  • 软件设计适配器模式

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

    类图

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

    运行截图

  • 相关阅读:
    别再重复造轮子了,利用list创建任意数据类型的链表
    可配置内存池实现
    简单内存池实现
    基于本博客版本中的循环缓冲的测试(Linux环境)
    循环缓冲实现(ring buffer/circular buffer)
    recvfrom超时设置
    Linux系统如何做性能测试?
    深入理解虚拟内存机制
    Linux 内核的测试和调试
    python学习之路 实现简单的计算机功能。
  • 原文地址:https://www.cnblogs.com/Arisf/p/15685587.html
Copyright © 2011-2022 走看看