• 软件设计适配器模式


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

    类图

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

    运行截图

  • 相关阅读:
    PHP 自制日历
    PHP Log时时查看小工具
    JavaScript作用域原理——预编译
    Robot Framework与Web界面自动化测试学习笔记:定位到新窗口
    Robot Framework与Web界面自动化测试学习笔记:简单例子
    Jquery学习笔记:利用find和children方法获取后代元素
    Jquery学习笔记:利用parent和parents方法获取父节点
    Jquery学习笔记:通过层次关系获取jquery对象
    Jquery学习笔记:获取jquery对象的基本方法
    Bootstrap技术: 模式对话框的使用
  • 原文地址:https://www.cnblogs.com/Arisf/p/15685587.html
Copyright © 2020-2023  润新知