• 适配器模式


    适配器模式将一个类的接口,转换成客户所期望的另一个接口,适配器让原本接口不兼容的类可以合作无间。

    package cn.adapter.demo;
    /**
     * 鸭子接口:会quack叫和飞
     * @author wy
     *
     */
    public interface Duck {
    
    	public void quack();
    
    	public void fly();
    }
    
    package cn.adapter.demo;
    /**
     * 一个fool鸭子
     * @author wy
     *
     */
    public class FoolDuck implements Duck {
    
    	@Override
    	public void quack() {
    		// TODO Auto-generated method stub
    		System.out.println("a fool duck quack...");
    	}
    
    	@Override
    	public void fly() {
    		// TODO Auto-generated method stub
    		System.out.println("a fool duck fly so far....");
    	}
    
    }
    
    package cn.adapter.demo;
    /**
     * 火鸡接口:只会gooble叫,而且飞不远
     * @author wy
     *
     */
    public interface Turkey {
    
    	public void gooble();
    
    	public void fly();
    }
    

    package cn.adapter.demo;
    /**
     * 一个野火鸡
     * @author wy
     *
     */
    public class WildTurkey implements Turkey {
    
    	@Override
    	public void gooble() {
    		// TODO Auto-generated method stub
    		System.out.println("wild turkey goggle....");
    	}
    
    	@Override
    	public void fly() {
    		// TODO Auto-generated method stub
    		System.out.println("wild turkey just can fly a short distince...");
    	}
    
    }
    
    火鸡适配器:

    package cn.adapter.demo;
    /**
     * 一个火鸡适配器:将火鸡变成鸭子
     * @author wy
     *
     */
    public class TurkeyApater implements Duck {
    	private Turkey turkey;
    
    	public TurkeyApater(Turkey turkey) {
    		this.turkey = turkey;
    	}
    
    	@Override
    	public void quack() {
    		// TODO Auto-generated method stub
    		turkey.gooble();
    	}
    
    	@Override
    	public void fly() {
    		// TODO Auto-generated method stub
    		turkey.fly();
    	}
    
    }
    
    鸭子适配器:

    package cn.adapter.demo;
    /**
     * 鸭子适配器:将鸭子变成火鸡
     * @author wy
     *
     */
    public class DuckApater implements Turkey {
    	private Duck duck;
    
    	public DuckApater(Duck duck) {
    		this.duck = duck;
    	}
    
    	@Override
    	public void gooble() {
    		// TODO Auto-generated method stub
    		duck.quack();
    	}
    
    	@Override
    	public void fly() {
    		// TODO Auto-generated method stub
    		duck.fly();
    	}
    
    }
    

    测试:

    package cn.adapter.demo;
    
    public class Test {
    
    	public static void main(String[] args) {
    		WildTurkey turkey = new WildTurkey();
    		TurkeyApater apater = new TurkeyApater(turkey);
    		//让火鸡执行鸭子的动作
    		apater.quack();
    		apater.fly();
    
    		FoolDuck duck = new FoolDuck();
    		DuckApater duckApater = new DuckApater(duck);
    		//让鸭子执行火鸡的动作
    		duckApater.gooble();
    		duckApater.fly();
    	}
    }
    



  • 相关阅读:
    软件工程(2019)第一次作业
    Coding.net主页地址链接
    解决Oracle 11g重建em时报错创建档案资料库时出错以及删除原有em时报监听程序未启动
    解决VirtualBox与锐捷网络冲突的问题
    王道数据结构复习(一)
    第二次结对编程—四则运算自动生成程序
    软件工程(2019)结对编程第一次作业
    软件工程(2019)第三次个人作业——求最大子段和(于VS2017下代码覆盖单元测试)
    软件工程(2019)第二次作业
    软件工程第一次作业
  • 原文地址:https://www.cnblogs.com/wyang0126/p/5039914.html
Copyright © 2020-2023  润新知