zoukankan      html  css  js  c++  java
  • java设计模式5——适配器模式

    java设计模式5——适配器模式

    1、结构型模式介绍

    1.1、作用

    从程序的结构上实现松耦合,从而可以扩大整体的类结构,用来解决更大的问题。

    分类:

    • 适配器模式
    • 代理模式
    • 桥接模式
    • 装饰模式
    • 组合模式
    • 外观模式
    • 享元模式

    2、适配器模式介绍

    适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。

    这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡。

    本节举例:(网线和笔记本电脑)

    3、第一种建模方式:(使用继承,网线和转换器绑在一起)又称为类适配器

    3.1、定义要适配的类(网线)

    package com.xgp.company.结构性模式.第一种_适配器模式;
    
    /**
     * 要被适配的类(网线)
     */
    public class Adaptee {
        public void request() {
            System.out.println("连接网线上网!");
        }
    }
    

    3.2、定义客户端类(电脑)

    package com.xgp.company.结构性模式.第一种_适配器模式;
    
    /**
     * 客户端类:想上网,插不上网线
     */
    public class Computer {
    
        //我们的电脑需要连接上转接器才能上网
        public void net(NetToUsb adapter) {
            //上网的具体实现,找一个转接头
            adapter.handleRequest();
        }
    
        public static void main(String[] args) {
            //电脑,适配器,网线
            Computer computer = new Computer();
            Adapter adapter = new Adapter();
    //        Adaptee adaptee = new Adaptee();
    
            computer.net(adapter);
    
        }
    }
    

    此时,该电脑无法插入网线进行上网,因此需要适配

    3.3、定义适配器的抽象实现

    package com.xgp.company.结构性模式.第一种_适配器模式;
    
    /**
     * 接口转换器的抽像实现
     */
    public interface NetToUsb {
        //作用:处理请求(网 => usb)
        public void handleRequest();
    
    }
    

    3.4、定义具体的网线转换器

    package com.xgp.company.结构性模式.第一种_适配器模式;
    /**
     * 1、继承方式(类适配器)
     * 2、组合(对象适配器:常用)
     */
    
    /**
     * 适配器:需要连接usb和网线
     */
    public class Adapter extends Adaptee implements NetToUsb {
    
        @Override
        public void handleRequest() {
            //可以上网了
            super.request();
        }
    }
    

    此时网线通过适配器插入了电脑,实现了上网的功能了

    连接网线上网!
    

    4、第二种建模方式:(使用组合,网线和转换器分离)又称为对象适配器

    网线类和适配器的抽象类不变

    4.1、适配器类的改进

    package com.xgp.company.结构性模式.第二种_适配器模式;
    /**
     * 1、继承方式(类适配器)
     * 2、组合(对象适配器:常用)
     */
    
    /**
     * 适配器:需要连接usb和网线
     */
    public class Adapter implements NetToUsb {
    
        private Adaptee adaptee;
    
        public Adapter(Adaptee adaptee) {
            this.adaptee = adaptee;
        }
    
        @Override
        public void handleRequest() {
            //可以上网了
            adaptee.request();
        }
    }
    

    4.2、电脑类的改进

    package com.xgp.company.结构性模式.第二种_适配器模式;
    
    /**
     * 客户端类:想上网,插不上网线
     */
    public class Computer {
    
        //我们的电脑需要连接上转接器才能上网
        public void net(NetToUsb adapter) {
            //上网的具体实现,找一个转接头
            adapter.handleRequest();
        }
    
        public static void main(String[] args) {
            //电脑,适配器,网线
            Computer computer = new Computer();
            Adaptee adaptee = new Adaptee();
    
            Adapter adapter = new Adapter(adaptee);
    
    
            computer.net(adapter);
    
        }
    }
    

    4.3、测试,电脑成功连上网线进行上网了

    连接网线上网!
  • 相关阅读:
    打造一款便携版的Sublime Text
    git stash命令使用手册
    Java List 转 String
    myeclipse中java文件头注释格式设置
    IntelliJ IDEA详细配置和使用教程-字体、编码和基本设置
    Android Studio添加文件注释头模板?
    Windows + Ubuntu下JDK与adb/android环境变量配置完整教程
    android studio gradle dependencies 包存放在哪儿?
    用Gradle命令行编译Android工程
    十分钟玩转 jQuery、实例大全
  • 原文地址:https://www.cnblogs.com/xgp123/p/12306674.html
Copyright © 2011-2022 走看看