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

    运行截图

  • 相关阅读:
    iphone 拨打电话的 两种方法-备
    vi编辑器经典技巧 -备
    iOS图片压缩问题
    NSStirng、NSArray、以及枚举(Method小集合)
    宏定义 button 方法 --备
    debug 输出 以及宏定义--备
    从别人写的 Object-C 中 Singleton (单例) 模式 中的一些理解--备
    makefile编写---.c .cpp 混合编译makefile 模板
    图像处理之基础---线性卷积和循环卷积的区别
    图像处理之基础---卷积去噪
  • 原文地址:https://www.cnblogs.com/Arisf/p/15685587.html
Copyright © 2011-2022 走看看