适配器方法设计模式_lzmvlog的博客-程序员ITS301

技术标签: 适配器方法设计模式  设计模式  

适配器方法设计模式

定义:将一个类的接口转换成客户希望的另一个接口。适配器模式让那些接口不兼容的类可以一起工作

大致其实就是类似于多态的实现,接下来我们用代码这个实现一下

首先我们需要实现的是创建一个适配器实现

学生接口

// 学生接口
public interface StudentInterface {
    
	String study();
}

教师接口

// 老师的接口
public interface TeacherInterface {
    
	String teach(); 
}

分别创建两个接口的实现

// 学生实现类
public class StudentImpl implements StudentInterface {
    

	public String study() {
    
		// 返回工作
		return "我是学生,我要学习!";
	}

}
// 老师实现类
public class TeacherImpl implements TeacherInterface {
    

	public String teach() {
    
		// 返回工作
		return "我是老师,要教书";
	}

}

创建适配器接口

// 适配器接口
public interface WorkerInterface {
    
	// 定义工作接口
	String work(Object worker);
}

创建适配器接口的实现

// 适配器实现
public class WorkerAdapterImpl implements WorkerInterface {
    

	// 定义工人工作内容
	private String context;
	
	// 实现工作
	public String work(Object worker) {
    
		// 实现判断工人的类型
		if(worker instanceof StudentImpl){
    
			context = ((StudentImpl) worker).study();
		}else if(worker instanceof TeacherImpl){
    
			context = ((TeacherImpl) worker).teach();
		}
		// 看到这里大家可能想到面向对象中的多态实现	我感觉的话确实有点像	
		return context;
	}

}

接下来就是测试这个适配器

// 测试类
public class MyTest {
    

	public static void main(String[] args) {
    
		// 获取学生和老师的工作对象
		StudentInterface studentInterface = new StudentImpl();
		TeacherInterface teacherInterface = new TeacherImpl();

		// 创建一个集合
		List<Object> list = new ArrayList<Object>();
		list.add(studentInterface);
		list.add(teacherInterface);
		
		// 创建适配器对象
		WorkerInterface workerInterface = new WorkerAdapterImpl();
		// 循环集合,让每一个工种都去做他需要去做的工作
		for (Object worker : list) {
    
			String workContext = workerInterface.work(worker);
			System.out.println(workContext);
		}
		
	}
}

这样让一个适配器实现所有的工种,工作量过于庞大,我们应该为所有的工种创建适配器。

下面我们为所有的工种去创建适配器

学生类的适配器

// 学生类的适配器
public class StudentAdapter implements WorkerInterface {
    

	public String work(Object worker) {
    
		return ((StudentInterface)worker).study();
	}

	public boolean validation(Object worker) {
    
		return (worker instanceof StudentInterface);
	}

}

老师类的适配器

// 老师类的适配器
public class TeacherAdapter implements WorkerInterface {
    

	public String work(Object worker) {
    
		return ((TeacherInterface)worker).teach();
	}

	public boolean validation(Object worker) {
    
		return (worker instanceof TeacherInterface);
	}

}

当我们为所有工种创建好了适配器,下面进行测试

// 测试类
public class MyTest {
    

	public static void main(String[] args) {
    
		// 获取学生和老师的工作对象
		StudentInterface studentInterface = new StudentImpl();
		TeacherInterface teacherInterface = new TeacherImpl();

		// 创建一个集合
		List<Object> list = new ArrayList<Object>();
		list.add(studentInterface);
		list.add(teacherInterface);
		
		// 循环集合,让每一个工种都去做他需要去做的工作
		for (Object worker : list) {
    
			// getAdapters 获取适配器
			WorkerInterface workerInterface = getAdapters(worker);
			// 获取工作内容
			String workContext = workerInterface.work(worker);
			// 输出工作内容
			System.out.println(workContext);
		}
		
	}

	// 获取相应的适配器对象
	private static WorkerInterface getAdapters(Object worker) {
    
		// 获取所特有的适配器
		List<WorkerInterface> list = getAllAdapter();
		// 循环适配器集合
		for (WorkerInterface workerAdapter : list) {
    
			// 判断寻找适配器
			if(workerAdapter.validation(worker)){
    
				return workerAdapter;
			}
		}
		return null;
	}

	// 获取所有的适配器
	private static List<WorkerInterface> getAllAdapter() {
    
		// 创建保存适配器的集合
		List<WorkerInterface> list = new ArrayList<WorkerInterface>();
		// 向是适配器集合添加所有的适配器
		list.add(new StudentAdapter());
		list.add(new TeacherAdapter());
		// 返合适的适配器集合为下一步寻找合适的适配器做准备
		return list;
	}
}

适配器可能会在我们在学习Spring Mvc中会遇到,因为Spring Mvc中的用到适配器。

更为详细说明,请关注个人博客:https://www.lzmvlog.top/

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43990445/article/details/90723972

智能推荐

捷豹路虎选择思博伦车载以太网一致性测试解决方案_经纬恒润的博客-程序员ITS301

现代化的汽车往往拥有上百种发动机控制单元(ECU),随着越来越多的车辆开始支持多摄像机和高级驾驶员辅助系统(ADAS)等先进特性,汽车设计师必须在车载网络中采用更高带宽的以太网技术。汽车以太网源于现代通信网络中所用的强健以太网技术,添加了一些专门针对汽车的协议和适合汽车环境的全新物理层连接能力。 为协助开发和验证汽车以太网系统并确定适合车辆的更佳以太网设计方案,捷豹路虎汽车公司选...

未来20年美国AI研究路线图_「已注销」的博客-程序员ITS301

2019年8月6号,美国计算社区联盟(CCC)和人工智能促进协会(AAAI)联合发布了美国未来20年AI研究路线图。主要关注如何发挥AI的价值和减轻AI的风险。小编对摘要部分进行翻译梳理...

Delphi版本插值Lagrange_aocai6813的博客-程序员ITS301

function Lagrange(x, y:ArrayDouble; N: integer; x1: Double): double;var I, J: Integer; a: Double;begin Result := 0; for i := 0 to N - 1 do begin a := 1; for J := 0 to N - 1 do begin...

随便推点

最小堆解决Top K问题_wangshuang1631的博客-程序员ITS301_维护k最小堆

问题描述:有一组数据n个,要求取出这组数据中最大的K个值。 对于这个问题,解法有很多中。比如排序及部分排序,不过效率最高的要数最小堆,它的时间复杂度为O(nlogk)。 解题思路:取出数组的前n个元素,创建长度为n的最小堆。从n开始循环数组的剩余元素,如果元素(a)比最小堆的根节点大,将a设置成最小堆的根节点,并让堆保持最小堆的特性。循环完成后,最小堆中的所有元素就是需要找的最大的n个元素

Trimble.Business.Center.v3.90.6369.58741 Trimble TILOS v9.0+TILOS_software2017的博客-程序员ITS301

Trimble.Business.Center.v3.90.6369.58741Trimble TILOS v9.0 1CD  借助TBC-HCE,承包商可以导入、复查和分析图形化的设计信息,并在整个项目进行期间,都能轻松地分配、管理以及跟踪施工信息。Trimble Business Center为工地定位设计的绘图数据管理器,为测量和工程建设设计的包括投影、基准转换、坐标系统以及工地校正

WLAN Roaming - the basics Even if you keep the same IP address, things get complicated._趟石过河的博客-程序员ITS301

The whole point of wireless LANs is the convenience of the mobility you get being able to wander from one part of the office to the other. Users expect the same completely transparent service they get

centos 6.5 java_Centos 6.5安装配置jdk_美丽芦苇的博客-程序员ITS301

服务器OS: Centos 6.5 x64本机OS: Ubuntu 14.04 x641.基于rpm包安装wget --no-check-certificate --no-cookie --header "Cookie: oraclelicense=accept-securebackup-cookie;" http://download.oracle.com/otn-pub/java/jdk/7u...

FlowLayout流式布局实现热门搜索,发帖加标签效果_wapchief的博客-程序员ITS301

本文所使用的FlowLayout来自于鸿洋大神的框架。 正好现在在做项目需要用到。自己试着用了下,具体可以看效果图 鸿洋的github:https://github.com/hongyangAndroid/FlowLayoutandroid Studio中注入依赖:compile 'com.zhy:flowlayout-lib:1.0.3'布局文件: zhy:max_select=设置可选中的

BOM 常用API_devincob的博客-程序员ITS301_bom api

BOM 简介用于操作浏览器的APIBOM是browser object model的缩写,简称浏览器对象模型BOM提供了独立于内容而与浏览器窗口进行交互的对象由于BOM主要用于管理窗口与窗口之间的通讯,因此其核心对象是windowBOM由一系列相关的对象构成,并且每个对象都提供了很多方法与属性BOM缺乏标准,JavaScript语法的标准化组织是ECMA,DOM的标准化组织是W3CB...