zoukankan      html  css  js  c++  java
  • JAVA设计模式之适配器模式

    定义:

             适配器模式将一个类的接口,转换成客户期望的另一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。

    适配器的分类:

      1. 组合:采用组合的方式的适配器成为对象适配器  特点:把“被适配者”作为一个对象组合到适配器类中,以修改目标接口包装被适配者

          2.继承:采用继承的方式称为类适配器       特点:通过多重继承不兼容接口,实现对目标接口的匹配,单一的为某个类而实现适配

    作用:

    1.  透明:通过适配器,客户端可以调用同一个接口,因而对客户端来说是透明的。这样做更简单、直接、紧凑。

    2.  重用:复用了现存的类,解决了现存类和复用环境要求不一致的问题。

    3.  低耦合:将目标类和适配者类解耦,通过引入一个适配器重用现有的适配者,而无需修改原有代码(遵循开闭原则)

    示例项目:有台笔记本需要三相插座充电,但有个二相电源,需要创建一个适配器进行两项转三相进行充电

    代码示例

    1.创建一个三相插座接口

    1 /**
    2  * 三相插座接口
    3  * */
    4 public interface ThreePlugIf {
    5     //使用三相电流充电
    6     public void powerWithThree();
    7 
    8 }
    View Code

    2.创建一个二相电源类

    1 public class GBTowPlug {
    2     //使用二相电流供电
    3     public void powerWithTow(){
    4         System.out.println("使用二相电流供电");
    5     }
    6 }
    View Code

    3.创建一个笔记本类,使用三相插座进行充电,但电源是两相的,需要适配器进行转换

     1 public class NoteBook {
     2     private ThreePlugIf plug;
     3     public NoteBook(ThreePlugIf plug){
     4         this.plug = plug;    
     5     }
     6     //使用插座充电
     7     public void charge(){
     8         plug.powerWithThree();
     9         
    10     }
    11     
    12 }
    View Code

    4-1.创建一个适配器(组合)

     1 /**
     2  * 二相转三相的插座适配器
     3  * */
     4 public class TowPlugAdapter implements ThreePlugIf {
     5     private GBTowPlug plug;
     6     public TowPlugAdapter(GBTowPlug plug){
     7         this.plug = plug;
     8     } 
     9     @Override
    10     public void powerWithThree() {
    11         System.out.println("通过转化");
    12         plug.powerWithTow();
    13     }
    14 
    15 }
    View Code

    4-2.创建一个适配器(继承)

     1 /**
     2  * 采用继承方式实现
     3  * */
     4 public class TowPlugAdapterExtends 
     5     extends GBTowPlug implements ThreePlugIf {
     6 
     7     @Override
     8     public void powerWithThree() {
     9         System.out.println("继承方式实现");
    10         this.powerWithTow();
    11     }
    12 }
    View Code

    5.测试类

     1 public class Test {
     2     public static void main(String[] args) {
     3         /**组合方式*/
     4         GBTowPlug tow = new GBTowPlug();
     5         ThreePlugIf three = new TowPlugAdapter(tow);
     6         NoteBook nb = new NoteBook(three);
     7         nb.charge();
     8         /**继承方式*/
     9         three = new TowPlugAdapterExtends();
    10         nb = new NoteBook(three);
    11         nb.charge();
    12     }
    13 }
    View Code
  • 相关阅读:
    normalize.css 中文版
    [转载]自适应高度输入框
    【转载】H5页面列表的无线滚动加载(前端分页)
    CSS设置table下tbody滚动条与thead对齐的方法
    [转载]Jquery mobiscroll 移动设备(手机)wap日期时间选择插件以及滑动、滚动插件
    wordpress 目录、数据结构和解析原理
    WordPress基础知识:条件判断标签及用法大全
    主题如何添加tag标签页面
    WordPress进阶:[2]不同页面显示不同的侧边栏
    WordPress进阶:[1]怎样用tag标签做导航菜单
  • 原文地址:https://www.cnblogs.com/wwzyy/p/4961990.html
Copyright © 2011-2022 走看看