当前位置:编程学习 > JAVA >>

设计模式五:适配器模式

定义:
将一个类的接口转换成客户希望的另外一个接口。
目标(Target)角色:定义Client使用的接口。
被适配(Adaptee)角色:这个角色有一个已存在并使用了的接口,而这个接口是需要我们适配的。
适配器(Adapter)角色:这个适配器模式的核心。它将被适配角色已有的接口转换为目标角色希望的接


分类:

类适配器模式
适配器角色对于被适配角色的适配是通过继承完成的。由于在java中不支持多重继承,而且继承有破坏封装之嫌,众多的书中(包括《设计模式》)都提倡使用组合来代替继承。

 

类适配器模式类图

 


对象适配器模式
适配器角色对于被适配角色的适配是通过组合来完成的。
 

对象适配器模式类图

 

举例:

类图

 

 

源码


[java] 
/**
 * 测试类
 */ 
public class Test { 
 
    public static void main(String[] args) { 
        //给HTC手机充电 
        Charger htcCharger = new HtcCharger(); 
        htcCharger.exportPower(); 
         
        //给N97手机充电 
        Charger n97Charger = new N97Charger(); 
        n97Charger.exportPower(); 
         
        //给N98手机充电 
        Charger n98Charger = new N98Charger(); 
        n98Charger.exportPower(); 
    } 
 

[java] 
/**
 * 充电器接口
 */ 
public interface Charger { 
 
    //输出电流 
    public void exportPower(); 
     

[java]
/**
 * HTC充电器
 */ 
public class HtcCharger implements Charger{ 
 
    @Override 
    public void exportPower() { 
        System.out.println("HTC充电器:输出5V电压!"); 
    } 
 

[java] 
/**
 * N97充电器,类的适配器模式
 */ 
public class N97Charger extends NokiaCharger implements Charger{ 
 
    @Override 
    public void exportPower() { 
        if(!this.check()){ 
            this.export(); 
            System.out.println("N97手机:充电中……"); 
        } 
    } 
 

[java]
/**
 * N98充电器,对象的适配器模式
 */ 
public class N98Charger implements Charger{ 
 
    private NokiaCharger nokiaCharger = new NokiaCharger(); 
     
    @Override 
    public void exportPower() { 
        if(!nokiaCharger.check()){ 
            nokiaCharger.export(); 
            System.out.println("N98手机:充电中……"); 
        } 
    } 
 

[java]
/**
 * 诺基亚充电器
 */ 
public class NokiaCharger { 
 
    public boolean check(){ 
        System.out.println("诺基亚充电器:检查电池电量!"); 
        return false; 
    } 
     
    public void export(){ 
        System.out.println("诺基亚充电器:开始充电!"); 
    } 
     


 

补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,