设计模式剖析系列之适配器模式

By heiry on 2019-08-07 [ in 技术 ]

适配器模式包含以下主要角色。

1. 已经存在的、具备完备功能的类 Adaptee(适配者)。

2. 当前系统业务所期待的接口(Target),但与现Adaptee不兼容,它可以是抽象类或接口。

3. 适配器类(Adapter)。通过继承或引用适配者的对象,把适配者接口转换成目标接口,让客户按目标接口的格式访问适配者。

实例:

现有一个两孔插座,能对外提供220v稳定电压,但现业务需要,需要提供三孔插座,同样输出220v稳定电压,这就需要一个适配器来进行转换。

代码结构及详细:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
package net.mosang.adapter;
public interface ThreeSocket {
public void threeSocket220v();//期望三孔输出220v电压的插线板
}
package net.mosang.adapter; public interface ThreeSocket { public void threeSocket220v();//期望三孔输出220v电压的插线板 }
package net.mosang.adapter;

public interface ThreeSocket {
  public void threeSocket220v();//期望三孔输出220v电压的插线板
}
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
package net.mosang.adapter;
public class TwoSocket {
public void twoSocket220v() {//现有两孔可输出220v电压的插线板
System.out.println("220v电压持续输出中。。。。。");
}
}
package net.mosang.adapter; public class TwoSocket { public void twoSocket220v() {//现有两孔可输出220v电压的插线板 System.out.println("220v电压持续输出中。。。。。"); } }
package net.mosang.adapter;

public class TwoSocket {
  public void twoSocket220v() {//现有两孔可输出220v电压的插线板
    System.out.println("220v电压持续输出中。。。。。");
  }
}
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
package net.mosang.adapter;
public class Adaptor implements ThreeSocket {
private TwoSocket two;
@Override
public void threeSocket220v() { //对外提供了三孔220v电压功能线板
two.twoSocket220v();//实际依然是经过两孔输出
}
public TwoSocket getTwo() {
return two;
}
public void setTwo(TwoSocket two) {
this.two = two;
}
public Adaptor(TwoSocket two) {
super();
this.two = two;
}
}
package net.mosang.adapter; public class Adaptor implements ThreeSocket { private TwoSocket two; @Override public void threeSocket220v() { //对外提供了三孔220v电压功能线板 two.twoSocket220v();//实际依然是经过两孔输出 } public TwoSocket getTwo() { return two; } public void setTwo(TwoSocket two) { this.two = two; } public Adaptor(TwoSocket two) { super(); this.two = two; } }
package net.mosang.adapter;

public class Adaptor implements ThreeSocket {
  private TwoSocket two; 
  @Override
  public void threeSocket220v() { //对外提供了三孔220v电压功能线板
    two.twoSocket220v();//实际依然是经过两孔输出
  }
  public TwoSocket getTwo() {
    return two;
  }
  public void setTwo(TwoSocket two) {
    this.two = two;
  }
  public Adaptor(TwoSocket two) {
    super();
    this.two = two;
  }
  
}
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
package net.mosang.adapter;
public class Client {
public static void main(String[] args) {
TwoSocket two = new TwoSocket();
Adaptor adaptor = new Adaptor(two);
adaptor.threeSocket220v(); // 输出"220v电压持续输出中。。。。。"
}
}
package net.mosang.adapter; public class Client { public static void main(String[] args) { TwoSocket two = new TwoSocket(); Adaptor adaptor = new Adaptor(two); adaptor.threeSocket220v(); // 输出"220v电压持续输出中。。。。。" } }
package net.mosang.adapter;

public class Client {

  public static void main(String[] args) {
    TwoSocket two = new TwoSocket();
    Adaptor adaptor = new Adaptor(two);
    adaptor.threeSocket220v(); // 输出"220v电压持续输出中。。。。。"
  }
}

UML关系图:

适配器模式示意图

 >>



© 2009-2024 MOSANG.NET DESIGNED BY HEIRY