【设计模式】【15】适配器模式

【设计模式】【15】适配器模式,第1张

应用场景

适配器模式,英文名Adapter Pattern

该模式将一种类/对象/数据,适配为另一种预期的类/对象/数据,这样两种不同性质的类/对象/数据就可以同时工作

该模式的优点是,不用修改源角色和目标角色的代码,只需要修改或创建新的适配器,就可以完成转换功能

在实际应用中,只要是扮演转换功能的角色,都可以称之为适配器,没有绝对的形式要求

但主要的应用形式,一般有以下几种

类适配器

适配器继承自源角色,同时实现目标角色接口,这样就可以同时控制两种角色的功能

至于是targetWork调用originWork,还是originWork调用targetWork,或者是协同工作

这是由业务需要来决定的,实例代码只是随便举了一种情况,请不要死记硬背


	//被适配者,源角色
	public class Adaptee {
	
	    public void originWork() {
	        System.out.println("originWork");
	    }
	}
	
	//目标角色
	public interface ITarget {
	
	    void targetWork();
	}
	
	//适配器,既保留Adaptee的功能,又具备ITarget功能
	public class Adapter extends Adaptee implements ITarget {
	
	    @Override
	    public void targetWork() {
	        originWork();
	    }
	}

对象适配器

适配器类包装一个源角色对象,同时实现目标角色接口,这样就可以同时控制两种角色的功能


	//被适配者,源角色
	public class Adaptee {
	
	    public void originWork() {
	        System.out.println("originWork");
	    }
	}
	
	//目标角色
	public interface ITarget {
	
	    void targetWork();
	}
	
	//适配器,既保留Adaptee的功能,又具备ITarget功能
	public class Adapter implements ITarget {
	
	    Adaptee adaptee = new Adaptee();
	
	    @Override
	    public void targetWork() {
	        adaptee.originWork();
	    }
	}

数据适配器

适配器类专门负责将一种数据类型转换为另一种数据类型,源角色直接调用适配器对源数据进行转换,得到目标数据

这种模式只要动态指定源角色需要的适配器即可,一般配合泛型使用(在C++中叫模板类型)


	//数据类
	public class Data {
	
	}
	
	//控件类
	public class View {
	
	}
	
	//适配器接口,负责将数据转换成控件
	public interface IAdapter<DATA, VIEW> {
	
	    VIEW createView(DATA data);
	
	    void setData(List<DATA> dataList);
	
	    List<DATA> getData();
	}
	
	//列表控件
	public class ListView {
	
	    IAdapter<Data, View> adapter;
	
	    //添加单个控件
	    public void addView(View view) {
	
	    }
	
	    //展示所有元素
	    public void display() {
	        List<Data> dataList = adapter.getData();
	        for (Data data : dataList) {
	            View view = adapter.createView(data);
	            addView(view);
	        }
	    }
	}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/717191.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)

保存