• 北风设计模式课程---《适配器模式》及应用场景


    北风设计模式课程---《适配器模式》及应用场景

    一、总结

    一句话总结:

    不仅要通过视频学,还要看别的博客里面的介绍,搜讲解,搜作用,搜实例
    设计模式都是对生活的抽象,比如用户获得装备,我可以先装备工厂先生产出来装备,然后给宗门武器库,宗门武器库发给我,如果是打怪获得的装备,可以是装备工厂把装备给的怪物装备库

    1、适配器模式 实质?

    转接口:适配器就是一种适配中间件,它存在于不匹配的二者之间,用于连接二者,将不匹配变得匹配,简单点理解就是平常所见的转接头,转换器之类的存在。

    2、适配器模式应用场景?

    (1)不符合现有的接口规范:想要使用一个已经存在的类,但是它却不符合现有的接口规范,导致无法直接去访问,这时创建一个适配器就能间接去访问这个类中的方法。
    (2)设计为可重用的类:我们有一个类,想将其设计为可重用的类(可被多处访问),我们可以创建适配器来将这个类来适配其他没有提供合适接口的类。

    3、类适配器 和 对象适配器 分别是是什么?

    类适配器:我们常想到的,通过继承实现
    对象适配器:通过组合实现,适配器中包含对象的引用

    4、接口适配器模式 是什么?

    N多的方法的接口,用适配器将方法置为空

    当存在这样一个接口,其中定义了N多的方法,而我们现在却只想使用其中的一个到几个方法,如果我们直接实现接口,那么我们要对所有的方法进行实现,哪怕我们仅仅是对不需要的方法进行置空(只写一对大括号,不做具体方法实现)也会导致这个类变得臃肿,调用也不方便,这时我们可以使用一个抽象类作为中间件,即适配器,用这个抽象类实现接口,而在抽象类中所有的方法都进行置空,那么我们在创建抽象类的继承类,而且重写我们需要使用的那几个方法即可。

    目标接口:A
    public abstract class Adapter implements A {
        public void a(){}
        public void b(){}
        public void c(){}
        public void d(){}
        public void e(){}
        public void f(){}
    }
    
    适配器:Adapter
    
    public class Ashili extends Adapter {
        public void a(){
            System.out.println("实现A方法被调用");
        }
        public void d(){
            System.out.println("实现d方法被调用");
        }
    }

    二、Java设计模式之《适配器模式》及应用场景

    转自或参考:Java设计模式之《适配器模式》及应用场景
    https://www.cnblogs.com/V1haoge/p/6479118.html

      适配器就是一种适配中间件,它存在于不匹配的二者之间,用于连接二者,将不匹配变得匹配,简单点理解就是平常所见的转接头,转换器之类的存在。

      适配器模式有两种:类适配器、对象适配器、接口适配器

      前二者在实现上有些许区别,作用一样,第三个接口适配器差别较大。

    1、类适配器模式:

      原理:通过继承来实现适配器功能。

      当我们要访问的接口A中没有我们想要的方法 ,却在另一个接口B中发现了合适的方法,我们又不能改变访问接口A,在这种情况下,我们可以定义一个适配器p来进行中转,这个适配器p要实现我们访问的接口A,这样我们就能继续访问当前接口A中的方法(虽然它目前不是我们的菜),然后再继承接口B的实现类BB,这样我们可以在适配器P中访问接口B的方法了,这时我们在适配器P中的接口A方法中直接引用BB中的合适方法,这样就完成了一个简单的类适配器。

      详见下方实例:我们以ps2与usb的转接为例

    ps2接口:Ps2

    1 public interface Ps2 {
    2     void isPs2();
    3 }

    USB接口:Usb

    1 public interface Usb {
    2     void isUsb();
    3 }

    USB接口实现类:Usber

    1 public class Usber implements Usb {
    2 
    3     @Override
    4     public void isUsb() {
    5         System.out.println("USB口");
    6     }
    7 
    8 }

    适配器:Adapter

    1 public class Adapter extends Usber implements Ps2 {
    2 
    3     @Override
    4     public void isPs2() {
    5         isUsb();
    6     }
    7 
    8 }

    测试方法:Clienter

    1 public class Clienter {
    2 
    3     public static void main(String[] args) {
    4         Ps2 p = new Adapter();
    5         p.isPs2();
    6     }
    7 
    8 }

    显示结果:

    USB口

    实例讲解:

      我手中有个ps2插头的设备,但是主机上只有usb插头的插口,怎么办呢?弄个转换器,将ps2插头转换成为USB插头就可以使用了。

      接口Ps2:描述ps2接口格式

      接口Usb:描述USB接口格式

      类Usber:是接口Usb的实现类,是具体的USB接口格式

      Adapter:用于将ps2接口格式转换成为USB接口格式

    2、对象适配器模式

      原理:通过组合来实现适配器功能。

      当我们要访问的接口A中没有我们想要的方法 ,却在另一个接口B中发现了合适的方法,我们又不能改变访问接口A,在这种情况下,我们可以定义一个适配器p来进行中转,这个适配器p要实现我们访问的接口A,这样我们就能继续访问当前接口A中的方法(虽然它目前不是我们的菜),然后在适配器P中定义私有变量C(对象)(B接口指向变量名),再定义一个带参数的构造器用来为对象C赋值,再在A接口的方法实现中使用对象C调用其来源于B接口的方法。

      详见下方实例:我们仍然以ps2与usb的转接为例

    ps2接口:Ps2

    1 public interface Ps2 {
    2     void isPs2();
    3 }

    USB接口:Usb

    1 public interface Usb {
    2     void isUsb();
    3 }

    USB接口实现类:Usber

    1 public class Usber implements Usb {
    2 
    3     @Override
    4     public void isUsb() {
    5         System.out.println("USB口");
    6     }
    7 
    8 }

    适配器:Adapter

     1 public class Adapter implements Ps2 {
     2     
     3     private Usb usb;
     4     public Adapter(Usb usb){
     5         this.usb = usb;
     6     }
     7     @Override
     8     public void isPs2() {
     9         usb.isUsb();
    10     }
    11 
    12 }

    测试类:Clienter

    1 public class Clienter {
    2 
    3     public static void main(String[] args) {
    4         Ps2 p = new Adapter(new Usber());
    5         p.isPs2();
    6     }
    7 
    8 }

    结果显示:

    USB口

    实例讲解:

      我手中有个ps2插头的设备,但是主机上只有usb插头的插口,怎么办呢?弄个转换器,将ps2插头转换成为USB插头就可以使用了。

      接口Ps2:描述ps2接口格式

      接口Usb:描述USB接口格式

      类Usber:是接口Usb的实现类,是具体的USB接口格式

      Adapter:用于将ps2接口格式转换成为USB接口格式

    3、接口适配器模式

      原理:通过抽象类来实现适配,这种适配稍别于上面所述的适配。

      当存在这样一个接口,其中定义了N多的方法,而我们现在却只想使用其中的一个到几个方法,如果我们直接实现接口,那么我们要对所有的方法进行实现,哪怕我们仅仅是对不需要的方法进行置空(只写一对大括号,不做具体方法实现)也会导致这个类变得臃肿,调用也不方便,这时我们可以使用一个抽象类作为中间件,即适配器,用这个抽象类实现接口,而在抽象类中所有的方法都进行置空,那么我们在创建抽象类的继承类,而且重写我们需要使用的那几个方法即可。

    目标接口:A

    1 public interface A {
    2     void a();
    3     void b();
    4     void c();
    5     void d();
    6     void e();
    7     void f();
    8 }

    适配器:Adapter

    1 public abstract class Adapter implements A {
    2     public void a(){}
    3     public void b(){}
    4     public void c(){}
    5     public void d(){}
    6     public void e(){}
    7     public void f(){}
    8 }

    实现类:Ashili

    1 public class Ashili extends Adapter {
    2     public void a(){
    3         System.out.println("实现A方法被调用");
    4     }
    5     public void d(){
    6         System.out.println("实现d方法被调用");
    7     }
    8 }

    测试类:Clienter

    1 public class Clienter {
    2 
    3     public static void main(String[] args) {
    4         A a = new Ashili();
    5         a.a();
    6         a.d();
    7     }
    8 
    9 }

    4、适配器模式应用场景

    类适配器与对象适配器的使用场景一致,仅仅是实现手段稍有区别,二者主要用于如下场景:

      (1)想要使用一个已经存在的类,但是它却不符合现有的接口规范,导致无法直接去访问,这时创建一个适配器就能间接去访问这个类中的方法。

      (2)我们有一个类,想将其设计为可重用的类(可被多处访问),我们可以创建适配器来将这个类来适配其他没有提供合适接口的类。

      以上两个场景其实就是从两个角度来描述一类问题,那就是要访问的方法不在合适的接口里,一个从接口出发(被访问),一个从访问出发(主动访问)。

    接口适配器使用场景:

      (1)想要使用接口中的某个或某些方法,但是接口中有太多方法,我们要使用时必须实现接口并实现其中的所有方法,可以使用抽象类来实现接口,并不对方法进行实现(仅置空),然后我们再继承这个抽象类来通过重写想用的方法的方式来实现。这个抽象类就是适配器。

     
  • 相关阅读:
    maven Spring MVC项目
    NET 解析HTML代码——NSoup
    Masstransit开发基于消息传递的分布式应用
    iOS项目生成通用Windows应用
    测试框架mochajs详解
    9宫格拼图
    spring 整合redis
    Linux下SSH Session复制
    File Templates for web.xml & web-fragment.xml (Servlet 2.3, 2.4, 2.5 + 3.0)
    极度简约 最小 Linux 发行版 Tiny Core Linux 7.1 发布
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/11032858.html
Copyright © 2020-2023  润新知