现在的位置: 首页 > 综合 > 正文

设计模式–适配器模式与外观模式

2019年06月12日 ⁄ 综合 ⁄ 共 1328字 ⁄ 字号 评论关闭

2015年1月31日21:00:07

说实话我觉得适配器模式和外观模式就是一个意思,区别就在于使用初衷。另外适配器模式和装饰者模式很像,根据需要自己选择使用那一种。

适配器模式的本质是对被适配的一个或者多个类进行包装以提供一个目标格式的接口,对于调用者来说,被适配者的调用过程是透明的。(适配器模式是为了达到对原来类的复用,但是不修改原来类的代码的目的而推出的)

public class demo{
  public static void main(String[] args){
     A a=new A();
     target   t = new Aadaptor(a);
    t.functionA1();
  }
}

public interface target{
   public void functionA1();
<pre name="code" class="java">   public void functionB1();

}

public class Aadaptor implements target{
A myA;
public Aadaptor(A a){
myA=a;
}

   public void functionA1(){
     myA.functionB();
   } 
<pre name="code" class="java">   public void functionB1(){ 
<pre name="code" class="java"><pre name="code" class="java">     myA.functionC();


}



}public class A{public void functionA();

public void functionB();
public void functionC();

}


上面就是一个典型的适配器的代码(虽然我写的有点接近外观模式,但大差不差)

适配器模式在生活中有很多例子,比如我最近买了架电子琴,电子琴的耳机插口是6.5MM的,但是普通耳机是3.5mm的,于是我买了一个6.5到3.5的耳机转接头,这样我就可以把3.5的耳机插到电子琴上了,这里转接头就是适配器。另外一个常见的就是水果机,如果拿的是国外的货,那么就面临一个问题就是国外的电源插座和电压与国内是存在差别的,为了手机能在国内充电,我们也需要买一个插头的电源适配器。总的来说就是在一个对象外面再包装上一层,我们可以通过外层去操作对象,而不需要关注对象内部是怎么被调用的。

外观模式和适配器模式很一致,只是使用的初衷是简化接口,比如我们去浴室洗澡,我们可以把开灯,放热水,准备毛巾等打包成一个方法,我们调用适配器的这个方法就可以完成一系列的事情。注意外观模式和适配器模式都可以对单个或者多个对象进行包装。比如外观模式,多个就是之前举得例子,单个:我们把初始化打印机,打印内容和打印机关闭封装成适配器的一个方法。适配器模式,单个:看例子,多个:我们把服务员点单,厨师做菜,服务员送菜封装成一个适配器的方法。

外观模式和适配器模式核心都是一样的,我觉得没必要细分。

适配器模式与装饰者模式的区别:1适配器模式必定导致对外接口的改变,而装饰者模式的使用初衷就是在不改变接口的前提下扩展类的功能。2适配器基本上嵌套程度只有1层,只是封装改变接口,而装饰者模式可以嵌套多层,可以灵活使用嵌套来达到特定的目的

抱歉!评论已关闭.