【Unity与23种设计模式】适配器模式(Adapter)
GoF中定义:
“将一个类的接口转换成为客户端期待的类接口。适配器模式让原本接口不兼容的类能一起合作。”
适配器模式与装饰模式有一定的相似之处
两者都是在着手解决C#不能多继承的问题
当出现一个不符合客户端接口的情况时
再不想破坏接口的前提下
就必须设计一个适配器来进行转换
将原本不符合的接口,转换到客户端预期的接口上
public abstract class Target {
public abstract void Request();
}
public class Adaptee {
public Adaptee() { }
public void SpecificRequest() {
Debug.Log("调用了Adaptee.SpecificRequest");
}
}
public class Adapter : Target {
private Adaptee m_Adaptee = new Adaptee();
public Adapter() { }
public override void Request() {
m_Adaptee.SpecificRequest();
}
}
//测试类
public class TestAdapter{
void UnitTest() {
Target theTarget = new Adapter();
theTarget.Request();
}
}
其实就是在不能多继承的情况下
一种采取继承方式
其他的持有引用
然后在重新组合
文章整理自书籍《设计模式与游戏完美开发》 菜升达 著
【Unity与23种设计模式】适配器模式(Adapter)的更多相关文章
- 【Unity与23种设计模式】解释器模式(Interpreter)
GoF中定义: "定义一个程序设计语言所需要的语句,并提供解释来解析(执行)该语言." 传统上,执行程序代码通常通过两种方式 第一种:编译程序 第二种:解释器 常见的使用解释器的程 ...
- 【Unity与23种设计模式】原型模式(Prototype)
GoF中定义: "使用原型对象来产生指定类的对象,所以产生对象时,是使用复制原型对象来完成." Unity中 开发者可以组装游戏对象 它可以包括复杂的组件 组装好了之后,就可以将其 ...
- 【Unity与23种设计模式】观察者模式(Observer)
GoF中定义: "在对象之间定义一个一对多的连接方法,当一个对象变换状态时,其他关联的对象都会自动收到通知." 现实中,社交网络就是个例子. 以前的报社,每次出新刊的时候, 报刊便 ...
- 【Unity与23种设计模式】命令模式(Command)
GoF中定义: "将请求封装成为对象,让你可以将客户端的不同请求参数化,并配合队列.记录.复原等方法来执行请求的操作." 实现命令模式的标准在于: 当请求被对象化后,对于请求对象是 ...
- 【Unity与23种设计模式】状态模式(State)
定义: "让一个对象的行为随着内部状态的改变而变化,而该对象也像是换了类一样" 应用场景: 角色AI:控制角色在不同状态下的AI行为 服务器连接状态:开始连线.连线中.断线等状态 ...
- 【Unity与23种设计模式】抽象工厂模式(Abstract Factory)
GoF中定义: "提供一个能够建立整个类群组或有关联的对象,而不必指明它们的具体类." 意思就是 根据不同的执行环境产生不同的抽象类子类 抽象工厂模式经常在面试中会涉及到 下面的例 ...
- 【Unity与23种设计模式】代理模式(Proxy)
GoF中定义: "提供一个代理者位置给一个对象,好让代理者可以控制存取这个对象." 代理模式多用来优化资源的加载 当资源已经加载过时,使用原来的资源 当资源没有加载过时,开始加载 ...
- 【Unity与23种设计模式】装饰模式(Decorator)
GoF中定义: "动态地附加额外的责任给一个对象.装饰模式提供了一个灵活的选择,让子类可以用来扩展功能." 装饰模式一般用来增加新功能 它可以避免更改已经实现的程序代码 从而增加系 ...
- 【Unity与23种设计模式】访问者模式(Visitor)
GoF中定义: "定义一个能够在一个对象结构中对于所有元素执行的操作.访问者让你可以定义一个新的操作,而不必更改到被操作元素的类接口." 暂时没有完全搞明白 直接上代码 //访问者 ...
随机推荐
- (MonoGame从入门到放弃-3)-放弃MonoGame
又一段时间过去了,这一章没内容了.我真的已经放弃MonoGame的学习了,MonoGame用起来感觉就是在自己实现2d游戏引擎一样,好多现代游戏引擎有的内容都没有...,我只是想做游戏,而不是给引擎添 ...
- js中判断数组中是否含有某个字符串方法
1.两个数组间互相校验 Var inArray = function(arr, item) { for(var i = 0; i < arr.length; i++) { if(arr[i] ...
- Flask從入門到入土(一)——程序的基本結構
一.初始化 所有Flask程序都必須創建一個程序實例.Web服務器使用一種名爲Web服務器網關接口的協議,把接收自客戶端的所有請求都轉交給這個對象處理.程序實例書Flask類的對象,創建代碼: fro ...
- Ubuntu搭建Hadoop的踩坑之旅(一)
本文将介绍如何使用虚拟机一步步从安装Ubuntu到搭建Hadoop伪分布式集群. 本文主要参考:在VMware下安装Ubuntu并部署Hadoop1.2.1分布式环境 - CSDN博客 一.所需的环境 ...
- bash文件的详细解读
一.bash的分类 1. 按生效范围分类 全局生效 /etc/profile /etc/profile.d/*.sh /etc/bashrc 个人用户生效 ~/.bash_profile ~/.bas ...
- WireShark过滤解析HTTP/TCP
过滤器的使用: 可利用“&&”(表示“与”)和“||”(表示“或”)来组合使用多个限制规则, 比如“(http && ip.dst == 64.233.189.104) ...
- html、text、val、attr、prop区别。this.value和$(this).val()区别以及return用法
html(): html() 方法返回或设置被选元素的内容 (inner HTML). 当使用该方法读取多个值时,它会返回第一个匹配元素的内容. 当使用该方法设置一个值时,它会覆盖所有匹配元素的内容. ...
- Windows PowerShell漫谈-win7下没有超级终端
Windows PowerShell是我在研究win7新特性的时候发现的新工具,起初没有对它产生太大的兴趣,只是简单看看了有关它的介绍.简单使用了一下,感觉上它和cmd.exe没有本质区别.对它产生兴 ...
- 【mongodb系统学习之四】查看mongodb进程
四.查看mongodb进程(可以配合启动和关闭使用): 1).方法一:直接查看mongodb进程是否已经存在(用上面的方式启动后,需要另开一个窗口操作):ps –ef|grep mongodb, 如图 ...
- 基于am3358的led跑马灯测试
#include <sys/ioctl.h> #include<stdio.h> #include <fcntl.h> #include <sys/types ...