必威体育Betway必威体育官网
当前位置:首页 > IT技术

适配器模式

时间:2019-08-20 04:14:25来源:IT技术作者:seo实验室小编阅读:65次「手机版」
 

适配器模式

适配器模式

  1. 适配器模式的定义是,Convert the interface of a class into another interface clients expect,将某个类的接口转换为接口客户所需的类型。换句话说,适配器模式解决的问题是,使得原本由于接口不兼容而不能一起工作、不能统一管理的那些类可以在一起工作、可以进行统一管理。

  2. 这里举个适配器模式的例子:这里有厨师接口 ICooker、程序员接口 IProgrammer,分别用于定义他们各自工种的具体工作。然后又定义了全聚德的厨师 QjdCooker、京东的程序员JdProgrammer。这些不同的工种所做的工作都各自是不同的,无法进行统一管理,协同工作。所以,此时就需要定义一个员工适配器接口 IWorkerAdapter,用于将这些不同的工种进行统一管理。

    interface ICooker{
    //定义ICooker
    	String cook();
    }
    
    interface IProgrammer{
    //定义IProgrammer
    	String program();
    }
    
    class QjdCooker implements ICooker{
    
    	@Override
    	public String cook() {
    		return "美味烤鸭";
    	}
    }
    class JdProgrammer implements IProgrammer{
    
    	@Override
    	public String program() {
    		return "高效程序";
    	}
    }
    
  3. 不使用适配器模式

    若不使用适配器模式,则调用者需要定义出所有的工种对象,然后逐个工种对象的工作方法进行调用。有 30 个工种,就应调用 30 个工作方法。很麻烦。

    在这里插入图片描述

    class MyTest{
    	public static void main(String[] args) {
    		ICooker cooker=new QjdCooker();
    		IProgrammer programmer=new JdProgrammer();
    		
    		System.out.println(cooker.cook());
    		System.out.println(programmer.program());
    	}
    }
    
  4. 只定义一个适配器实现类

    这种方式类似于多功能充电器,一个电源插头上接着多种类型的充电接口。用户在使用时需要使用电器接口与多功能充电器上的充电接口逐个进行对比,接口匹配,则可以充电。

    在这里插入图片描述

    定义IWorkerAdapter

    interface IWorkAdapter{
    	//为了兼容所有的工种,这里的参数必须为Object
    	void work(Object worker);
    }
    

    定义 WorkerAdapter

    class WorkAdapter implements IWorkAdapter{
    
    	@Override
    	public void work(Object worker) {
    		if(worker instanceof IProgrammer){
    			System.out.println(((IProgrammer)worker).program());
    		}
    		if(worker instanceof ICooker){
    			System.out.println(((ICooker)worker).cook());
    		}
    		
    	}
    	
    }
    

    定义测试类

    class MyTest2{
    	public static void main(String[] args) {
    		ICooker cooker=new QjdCooker();
    		IProgrammer programmer=new JdProgrammer();
    		Object[] workers={cooker,programmer};
    		IWorkAdapter adapter=new WorkAdapter();
    		for(Object worker:workers){
    			adapter.work(worker);
    		}
     	}
    }
    
  5. 为每一个工种都定义一个适配器

    在这里插入图片描述

    修改 IWorkerAdapter

    interface IWorkAdapter{
    	//为了兼容所有的工种,这里的参数必须为Object
    	void work(Object worker);
    	//判断当前适配器是否支持指定的工种对象
    	boolean supports (Object worker);
    }
    

    定义 CookerAdatper、ProgrammerAdapter

    class CookerAdapter implements IWorkAdapter{
    
    	@Override
    	public void work(Object worker) {
    		System.out.println(((ICooker)worker).cook());
    	}
    	@Override
    	public boolean supports(Object worker) {
    		// TODO Auto-generated method stub
    		return (worker instanceof ICooker);
    	}
    	
    }
    
    class ProgrammerAdapter implements IWorkAdapter{
    
    	@Override
    	public void work(Object worker) {
    		System.out.println(((IProgrammer)worker).program());
    	}
    	@Override
    	public boolean supports(Object worker) {
    		// TODO Auto-generated method stub
    		return (worker instanceof IProgrammer);
    	}
    }
    

    定义测试类

    在这里插入图片描述

    在这里插入图片描述

相关阅读

看springmvc适配器模式---HandlerAdapter

适配器模式 就是你有一个类接口,但是这个接口不太符合你的预期,如果要用他就需要在他的源码上进行一些修改,这时你可以做一个适配器

适配器模式(Adapter模式)

在现实生活中,经常出现两个对象因接口不兼容而不能在一起工作的实例,这时需要第三者进行适配。例如,讲中文的人同讲英文的人对话时需

分享到:

栏目导航

推荐阅读

热门阅读