IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 【设计模式】【15】适配器模式 -> 正文阅读

[游戏开发]【设计模式】【15】适配器模式

应用场景

适配器模式,英文名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);
	        }
	    }
	}

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-04-24 09:46:08  更:2022-04-24 09:47:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/16 21:47:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码