设计模式之适配器模式

xiaoxiao2021-02-28  34

适配器模式:分为三种适配器模式,将一个类的接口转换为了客户期望的另一个类的接口

一种是对象适配器模式。

就是通过继承接口,将适配器实现适配者接口(就是要转换成的接口),再将被适配器的实例当作参数传入这个适配器,进行调用,这是使用组合的方式。

假如我们想要将一只鸡包装成一个鸭子。

package adapterpattern; class Main{ public static void main(String[] args){ Duck duck=new AdapterPattern(new WildChicken()); duck.fly();//输出的却是野鸡飞 duck.quack();//输出的确实野鸡叫 } } interface Duck{//鸭子的接口 public void quack();//鸭子的叫声 public void fly();//鸭子的飞行方式 } interface Chicken{//鸡的接口 public void ji();//鸡的叫声 public void fly();//鸡的飞行方式 } class WildChicken implements Chicken{ @Override public void ji() { System.out.println("野鸡叫"); } @Override public void fly() { System.out.println("野鸡飞"); }//实现了鸡的实例野鸡 } public class AdapterPattern implements Duck{//这个类功能是将鸡包装成一个鸭子对象 private Chicken chicken;//接受要包装的鸡的对象 public AdapterPattern(Chicken chicken){//接受一个鸡对象 this.chicken=chicken; } @Override public void quack() {//调用鸭子的方法,里面其实是包装的鸡的方法 chicken.ji();//调用鸡的方法 } @Override public void fly() {//调用鸭子的方法,里面其实是包装的鸡的方法 chicken.fly(); //调用鸡的方法 } }

代码里我们持有了被适配者的实例(野鸡),传入鸭子适配器中,调用时,将野鸡传入再调用这个适配器的方法,因为这个适配器实现了鸭子接口,所以我们看起来它就是个鸭子,实例化这个类时,我们看到了这只鸭子,并调用它的方法,让它飞让它叫,结果确实野鸡再叫。在飞。因为这个适配器里的鸭子的叫和飞里实际调用的是野鸡的飞和叫的方法

优点:只需要写一部分代码,将具体的任务交给被适配者完成,有弹性,并且可以接受被适配者的所有子类

缺点:每次都要实例化被适配者对象,让适配者对象完成主要任务。

而还有种适配器模式称为类适配器模式

这个模式是通过继承目标类和适配者类,目标类里调用适配者类,完成调用目标类的方法时调用适配者类。与对象适配器很相似,通过继承目标类适配器类,他们都是实例,而对象适配器通过实现了目标类的接口和组合被适配者类完成适配工作。

java并不支持多继承,我们通过实现目标类接口和继承被适配类完成了类适配器模式。

代码如下

package adapterpattern; public class AdapterClass { public static void main(String[] args){ FamilyChickenToDuck familyChickenToDuck=new FamilyChickenToDuck(); familyChickenToDuck.quack(); familyChickenToDuck.fly(); } } interface Duck1 {//鸭子的接口 public void quack();//鸭子的叫声 public void fly();//鸭子的飞行方式 } class FamilyChicken { public void ji() { System.out.println("家鸡叫"); } public void fly() { System.out.println("家鸡飞"); } } class FamilyChickenToDuck extends FamilyChicken implements Duck { @Override public void quack() { ji(); } //fly方法就是继承自FamilyChicken的方法 }

这种方法优点:不需要重新实现被适配类,必要的时候直接覆盖整个被适配者类

缺点:很多语言不支持多继承,只能适配某个特定类。

 

转载请注明原文地址: https://www.6miu.com/read-2623599.html

最新回复(0)