适配器模式

来源:互联网 发布:ios 阿里百川的云推送 编辑:程序博客网 时间:2024/05/20 23:40

适配器模式是7中结构型模式较为简单的一种,适配器,顾名思义,是作为处理两种不同接口或标准的中间沟通者。
这句话的含义是,适配器模式的场景大概要满足一下需求(以手机充电为例,不恰当的地方,还望指点):
模拟场景:我有220V输出的电源插座(Origin)和一部新买的华为MateS手机(Target),但充电器被快递小哥弄丢了......
1.有两个主体,一个是我想要充电的手机,手机支持5V的微型USB接口。
   另一个是220V的电源插座,我需要一个中间设备进行变压,输出给手机。
2.核心需求:我要5V的微型USB输出(我需要用一个接口的引用指向一个未实现该接口的类,然而类已经定义好,人家都在用了
    我不可能因为个人需求来修改公共类,这也不符合OCP原则嘛),简而言之,我要一个我的接口指向你的类。
3.以上需求显而易见不能随意改变实现类,但是又不能脱离该实现类另起炉灶。于是,充电器(适配器adapter)应运而生!
4.做法:定义一个中间类adapter来提供原始类Origin的服务。
//原始类
public class Origin {
 public void OriginMethod(){
  System.out.println("origin!");
 }
}

//接口,也就是想要引用Origin的接口
public interface Target {
 public void OriginMethod();
 public void AdapterMethod();
}

//中间类,也就是适配器Adapter
public class Adapter implements Target{
  Origin o;
  public void AdapterMethod(){
   System.out.println("adapter!");
  }
  public Adapter(Origin o){
   this.o=o;
  }
  public void OriginMethod(){
   o.OriginMethod();
  }
}

//测试类
public class Test {
 public static void main(String[] args) {
  Target t =  new Adapter(new Origin());
  t.AdapterMethod();
  t.OriginMethod();
 }
}

//输出
adapter!
origin!

还没看明白的童鞋看看专业人士解读:(上图和最后的概述和场景引自疯狂java讲义,希望对你的理解有所帮助)

概述
    将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
适用性
    1.你想使用一个已经存在的类,而它的接口不符合你的需求。    2.你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口      可能不一定兼容的类)协同工作。    3.(仅适用于对象Adapter)你想使用一些已经存在的子类,但是不可能对每一个都进行      子类化以匹配它们的接口。对象适配器可以适配它的父类接口。

0 0
原创粉丝点击