架构设计类,接口的时候需要考虑要使用设计模式(尤其对外接口使用时)
适配,策略效果一样提供统一的入口
适配模式:不同用户需要的方法名和我们提供的接口方法名不一样,这样要用的话需要一个适配类,适配目标方法名要套一层(里面调用接口方法)(转化方法名)
由于客户端不管你来源于那个接口,所以不能通过构造方式注入,用spring的注入等
1. 概述
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。
2. 解决的问题
即Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。
3. 模式中的角色
3.1 目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。
3.2 需要适配的类(Adaptee):需要适配的类或适配者类。
3.3 适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。
4. 模式解读
注:在GoF的设计模式中,对适配器模式讲了两种类型,类适配器模式和对象适配器模式。由于类适配器模式通过多重继承对一个接口与另一个接口进行匹配,而C#、java等语言都不支持多重继承,因而这里只是介绍对象适配器。
4.1 适配器模式的类图
4.2 适配器模式的代码实现
/// <summary> /// 定义客户端期待的接口 /// </summary> public class Target { /// <summary> /// 使用virtual修饰以便子类可以重写 /// </summary> public virtual void Request() { Console.WriteLine("This is a common request"); } } /// <summary> /// 定义需要适配的类 /// </summary> public class Adaptee { public void SpecificRequest() { Console.WriteLine("This is a special request."); } } /// <summary> /// 定义适配器 /// </summary> public class Adapter:Target { // 建立一个私有的Adeptee对象 private Adaptee adaptee = new Adaptee(); /// <summary> /// 通过重写,表面上调用Request()方法,变成了实际调用SpecificRequest() /// </summary> public override void Request() { adaptee.SpecificRequest(); } }
4.3 客户端代码
class Program { static void Main(string[] args) { // 对客户端来说,调用的就是Target的Request() Target target = new Adapter(); target.Request(); Console.Read(); } }
运行结果
5. 模式总结
5.1 优点
5.1.1 通过适配器,客户端可以调用同一接口,因而对客户端来说是透明的。这样做更简单、更直接、更紧凑。
5.1.2 复用了现存的类,解决了现存类和复用环境要求不一致的问题。
5.1.3 将目标类和适配者类解耦,通过引入一个适配器类重用现有的适配者类,而无需修改原有代码。
5.1.4 一个对象适配器可以把多个不同的适配者类适配到同一个目标,也就是说,同一个适配器可以把适配者类和它的子类都适配到目标接口。
5.2 缺点
对于对象适配器来说,更换适配器的实现过程比较复杂。
5.3 适用场景
5.3.1 系统需要使用现有的类,而这些类的接口不符合系统的接口。
5.3.2 想要建立一个可以重用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。
5.3.3 两个类所做的事情相同或相似,但是具有不同接口的时候。
5.3.4 旧的系统开发的类已经实现了一些功能,但是客户端却只能以另外接口的形式访问,但我们不希望手动更改原有类的时候。
5.3.5 使用第三方组件,组件接口定义和自己定义的不同,不希望修改自己的接口,但是要使用第三方组件接口的功能。
6. 适配器应用举例
6.1 使用过ADO.NET的开发人员应该都用过DataAdapter,它就是用作DataSet和数据源之间的适配器。DataAdapter通过映射Fill和Update来提供这一适配器。
6.2 手机电源适配器
相关推荐
输出 XML 适配模式 输出 XML 适配模式 输出 XML 适配模式
员工权限XML 适配模式
如果采用对象适配模式,则适配器类内部持有一个被适配者的引用,通过对象组合来调用被适配者的功能。 对于缺省适配模式,其通常用于一个接口有大量方法而只需要实现其中一部分方法的情况。通过为这些方法提供默认的...
设计模式之我见(1):设计模式概述 (100%) 设计模式面面观(2):设计模式基本要素与原则 (100%) 设计模式面面观(3):单件模式(Singletion)-创建型模式 (100%) 设计模式面面观(4):工厂模式...
用Adapter模式设计一个仿生机器人: 要求机器人可以模拟各种动物行为,在机器人中定义了一系列方法,如机器人叫喊方法cry()、机器人移动方法move()等。如果希望在不修改已有代码的基础上使得机器人能够像狗一样汪汪叫...
其他设计模式包括:适配器模式、缺省适配模式、合成模式、装饰模式、代理模式、享元模式、门面模式、桥梁模式、策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问...
源代码清单(按照库排列) com.javapatterns.abstractfactory 抽象工厂模式 ...com.javapatterns.windowadapter 缺省适配模式 com.javapatterns.xmlproperties 专题:适配器模式与XMLProperties
本篇将深入探讨如何在MVVM框架下进行UI更新,特别是针对App启动白屏优化和适配Android 10.0的深色模式。 首先,让我们来看看App启动白屏问题。当用户启动应用程序时,他们可能会看到短暂的白色屏幕,这是因为应用在...
适配器模式是软件设计模式中的一种,它的主要目的是解决接口不兼容问题,使得原本由于接口差异无法协同工作的类能够协同工作。在实际的软件开发过程中,我们常常遇到这样的情况:旧有的系统或第三方库提供了丰富的...
Egret开发游戏屏幕适配解决方案,适配不同分辨率,两种适配模式。 适配库是基于Egret的屏幕适配策StageScaleMode.NO_BORDER开发,采用NO_BORDER是因为他没有黑边,而且游戏内容是等比例拉伸。可以把NO_BORDER理解为...
2. **组件适配**:所有常见的UI组件,如按钮、输入框、表格、导航栏、弹窗等,都已针对暗黑模式进行了优化,确保了颜色对比度和可读性。 3. **色彩方案**:库中包含了深色和浅色两种色彩方案,确保了在不同背景下的...
此解决方案的核心是利用可信浏览器作为基础,改变传统C/S(客户端/服务器)应用的适配模式,降低开发门槛,提升开发效率,并确保版本升级的便利性和应用权限的可控性。 传统的C/S应用适配模式通常需要针对不同的...
游戏无法全屏的用户可以右击桌面,在图形选项里可以看到你当前的屏幕适配模式为保持显示缩放比。如果你直接进入修改的话是无法修改的,只能先修改分辨率。 首先,在电脑的桌面上右击,选择屏幕分辨率,进入修改屏幕...
#### 第三部分:接口适配模式(Interface Adaptation) - **第8章**:适配器模式(Adapter),将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 - **第9章*...
Cocos Creator提供了多种适配模式,包括固定宽高比、填充、缩放和自适应等。这些模式可以帮助开发者处理不同设备和分辨率下的显示问题。在全屏显示的场景下,通常会选用填充或缩放模式,以确保游戏内容可以完全填充...
iOS深色模式适配 不适配深色模式 直接在info新加一个字段 User Interface Style 设置值为 Light 适配深色模式 适配黑色模式info里面的那个字段就不用添加了 但是需要在每个UIWindow,UIViewController,UIView里面增加...
swift5 Demo,Xcode11创建项目,并且支持iOS13以下版本,支持iOS13深浅模式图片以及颜色动态变化。 使用SnapKit 5.0约束框架,Alamofire 5.0最新版本网络请求。 项目为标准的UITabBarController布局,项目下载修改...
对于iPad,可能需要考虑多任务支持,如Slide Over、Split View和Picture in Picture模式。此外,考虑到iPad的大屏幕,可能需要提供更丰富的信息展示和交互方式。 4. 设备功能: 不同的iOS设备可能具有不同的硬件...