设计模式之《结构型模式》版块(基于Java)

结构型模式(Structural Pattern)描述如何将类或者对象结合在一起形成更大的结构,就像搭积木,可以通过简单积木的组合形成复杂的、功能更为强大的结构。

适配器模式 泰国旅游使用插座问题

现实生活中的适配器例子 :泰国插座用的是两孔的(欧标),可以买个多功能转换插头 (适配器) ,这样就可以使用了。

设计模式之《结构型模式》版块(基于Java)

适配器模式基本介绍

适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper)

适配器模式属于结构型模式

主要分为三类:类适配器模式、对象适配器模式、接口适配器模式

适配器模式工作原理

适配器模式:将一个类的接口转换成另一种接口.让原本接口不兼容的类可以兼容

从用户的角度看不到被适配者,是解耦的

用户调用适配器转化出来的目标接口方法,适配器再调用被适配者的相关接口 方法

用户收到反馈结果,感觉只是和目标接口交互,如图

设计模式之《结构型模式》版块(基于Java)

类适配器模式介绍

基本介绍:Adapter类(适配器类),通过继承 src类(被适配者),实现 dst 类接口,完成src->dst的适配。

类适配器模式 应用实例

应用实例说明 以生活中充电器的例子来讲解适配器,充电器本身相当于Adapter,220V交流电 相当于src (即被适配者),我们的dst(即 目标)是5V直流电 (如下图)

设计模式之《结构型模式》版块(基于Java)

UML类图

设计模式之《结构型模式》版块(基于Java)

代码示例 //被适配者 public class Voltage220V { /**输出220V的电压*/ public int output220V(){ int src = 220; System.out.println("电压 = " + src + "伏"); return src; } } //----------------------------------------------------------------------------- //适配器接口/抽象层 public interface IVoltage5V { int output5V(); } //适配器具体实现 缺点:适配器类需要继承被适配类 增加了耦合度 public class VoltageAdapter extends Voltage220V implements IVoltage5V { @Override public int output5V() { //拿到220V电压 int src = output220V(); //转成5V int dstV = src / 44; return dstV; } } //----------------------------------------------------------------------------- //适配器调用者/使用者 结果使用者 public class Phone { /**充电方法 iVoltage5V.output5V() 返回的结果是目标*/ public void charging(IVoltage5V iVoltage5V){ if (iVoltage5V.output5V() == 5){ System.out.println("电压为5V 可以充电 ~~"); }else { System.out.println("电压大于5V 不能充电 ~~"); } } } //----------------------------------------------------------------------------- //客户端 测试 public class Client { public static void main(String[] args) { System.out.println("类适配器模式"); Phone phone = new Phone(); phone.charging(new VoltageAdapter()); } } 类适配器模式注意事项和细节

缺点:Java是单继承机制,所以类适配器需要继承src类这一点算是一个缺点, 因为这要 求dst必须是接口,有一定局限性;

缺点:src类的方法在Adapter中都会暴露出来,也增加了使用的成本。

优点:由于其继承了src类,所以它可以根据需求重写src类的方法,使得Adapter的灵活性增强了。

对象适配器模式 基本介绍

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzzjxd.html