zoukankan      html  css  js  c++  java
  • 设计模式(7)---适配器模式

    在这里插入图片描述

    上一篇:原型模式

    1.什么是适配器模式?

      下面这个读卡器的性质就能够非常清晰的表示这个问题:

    在这里插入图片描述

      读卡器作为内存卡电脑之间的沟通桥梁,使得我们可以通过笔记本来存取内存卡上面的数据。

    官方一点的解释:

      适配器模式是作为两个完全独立不兼容的接口的连接桥梁。在适配器模式中我们定义一个类,该类负责加入独立的接口功能。

    2.适配器模式的优缺点?

    1)优点:
      使两个毫无关系的类能够一起合作运行,提高了类的复用性。
    2)缺点:
      提高了代码的复杂性,如果没有必要,尽量少用此模式(个人建议)

    适配器模式更多用于已正常运行的项目进行维护升级

    3.适配器模式怎么使用?

    2.1 类继承

    1)定义内存卡类
    内存卡拥有存储功能,其他设备连接上内存卡后可以访问其存储的数据。
    /**
     * 定义内存卡接口
     */
    public class MemoryCard {
    
    	/**
    	 * 内存卡的存储功能
    	 */
    	void storage() {
    		System.out.println("从内存卡中获取存储的文件");
    	}
    }
    
    2)定义读卡器类

    读卡器类就是将电脑和内存卡两个互相独立的类进行连接整合,它既有电脑的USB插口,也有内存卡的插口。

    /**
     * 定义 读卡器 接口
     */
    public class CardReader extends MemoryCard implements USBInterface  {
    
    	@Override
    	public void handleRequest() {
    		//调取由内存卡存储的文件
    		super.storage();
    	}
    }
    
    
    3)定义电脑类

    电脑上的read()表示读取文件的功能。

    /**
     * 定义 电脑 类
     */
    public class Computer {
    
    	/**
    	 * 读取文件
    	 * <p>
    	 * 电脑插上读卡器才可以读取内存卡的数据
    	 */
    	void read(CardReader cardReader) {
    		cardReader.handleRequest();
    	}
    }
    
    4)定义测试类
    /**
     * 定义 从测试类
     */
    public class Test {
    
    	public static void main(String[] args) {
    		Computer computer = new Computer();
    		CardReader cardReader = new CardReader();
    
    		comcomputer.read(cardReader);
    	}
    }
    
    5)测试结果

    我们使用comcomputer.read(cardReader);使用了电脑读取了内存卡上面的数据。
    在这里插入图片描述

    但是!

    在这里插入图片描述
      因为java中的类使单继承的,这种方式使用起来具有一定的局限性,所以更加推荐使用第二种方式:组合或者说是对象适配器的方式来进行实现

    2.1 类继承

    1)修改 读卡器 类
    /**
     * 定义 读卡器 接口
     */
    public class CardReader implements USBInterface {
    
    	private MemoryCard memoryCard;
    
    	public CardReader(MemoryCard memoryCard) {
    		this.memoryCard = memoryCard;
    	}
    
    	@Override
    	public void handleRequest() {
    		//调取由内存卡存储的文件
    		memoryCard.storage();
    	}
    }
    
    2)编写测试类
    /**
     * 定义 从测试类
     */
    public class Test {
    
    	public static void main(String[] args) {
    		Computer computer = new Computer();
    		MemoryCard memoryCard = new MemoryCard();
    		//将内存卡插到读卡器上
    		CardReader cardReader = new CardReader(memoryCard);
    		//将读卡器插到电脑上
    		computer.read(cardReader);
    	}
    }
    
    3)测试结果

    在这里插入图片描述
      将读卡器类进行修改之后,我们一样能够实现同样的效果,电脑通过读卡器读取到内存卡上的数据。

    下一篇:桥接模式

  • 相关阅读:
    JobTracker作业启动过程分析
    结构体传参
    getchar()
    char *a与char a[n]的区别
    EOF NULL 之间的区别
    现代方法第15章第三节的程序
    交换机console口连接
    undefined reference问题总结
    二维数组与指针
    数组作为参数传递的时候,被调用的函数内无法计算出数组的大小
  • 原文地址:https://www.cnblogs.com/wgty/p/12810434.html
Copyright © 2011-2022 走看看