zoukankan      html  css  js  c++  java
  • GoF23种设计模式之结构型模式之适配器模式

    一、概述
            将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
    二、适用性
    1.你想使用一个已经存在的类,但是它的接口不符合你的要求的时候。
    2.你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口肯不一定兼容的类)协同工作的时候。
    3.你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口的时候。对象适配器可以适配它的父类接口。
    三、参与者
    1.Target:定义Client使用的与特定领域相关的接口。
    2.Adaptee:定义一个已经存在的接口,该接口需要适配。
    3.Adapter:对Adaptee接口与Target接口进行适配。
    4.Client:与符合Target接口的对象协同。
    四、类图
    五、示例
    Target
    [java] view plain copy
     
     print?
    1. package cn.lynn.adapter;  
    2.   
    3. public interface ICharger {  
    4.   
    5.     public void chargeIPhone();  
    6.       
    7.     public void chargeAndroid();  
    8.   
    9. }  
    Adaptee
    [java] view plain copy
     
     print?
    1. package cn.lynn.adapter;  
    2.   
    3. public class IPhone {  
    4.   
    5.     public void chargeIPhone() {  
    6.         System.out.println("支持IPhone手机充电!");  
    7.     }  
    8.   
    9. }  
    Adapter
    [java] view plain copy
     
     print?
    1. package cn.lynn.adapter;  
    2.   
    3. public class Android implements ICharger {  
    4.   
    5.     private IPhone iPhone;  
    6.   
    7.     public Android(IPhone iPhone) {  
    8.         this.iPhone = iPhone;  
    9.     }  
    10.   
    11.     @Override  
    12.     public void chargeIPhone() {  
    13.         iPhone.chargeIPhone();  
    14.     }  
    15.   
    16.     @Override  
    17.     public void chargeAndroid() {  
    18.         System.out.println("支持Android手机充电!");  
    19.     }  
    20.   
    21. }  
    Client
    [java] view plain copy
     
     print?
    1. package cn.lynn.adapter;  
    2.   
    3. public class Client {  
    4.   
    5.     public static void main(String[] args) {  
    6.         ICharger charger = new Android(new IPhone());  
    7.         charger.chargeIPhone();  
    8.         charger.chargeAndroid();  
    9.     }  
    10.   
    11. }  
    Result
    [java] view plain copy
     
     print?
    1. 支持IPhone手机充电!  
    2. 支持Android手机充电!  
     
     
  • 相关阅读:
    jQuery中时间戳和日期的相互转换
    jquery append 方法应用
    MySQL中实现连续日期内数据统计,缺省天数0补全
    jQuery通过ajax请求php遍历json数组到table中的代码
    sql相同表不同查询条件合并显示
    paginate()出来的数据怎样循环插入数据?
    使用paginate分页后数据处理
    ThinkPhp3.2.3 使用phpExcel导入数据
    判断时间戳是星期几
    英文加数字升序/降序
  • 原文地址:https://www.cnblogs.com/huangwentian/p/7471542.html
Copyright © 2011-2022 走看看