接口型模式之Adapter(适配器)模式

1.如果你期望将类的外部接口适配客户期望的接口,可使用Adapter(适配器)模式。
2.类型:类适配器、对象适配器。
3.举例:
3.1uml模型
这里写图片描述
3.2源码

//插座接口
public interface Socket {
    public void hole();  
}
//已存在的一孔插口类
public class OneSocket {
public void oneHole() {  
        System.out.println("一孔插座");  
    }  
}   
//已存在的三孔插口类
public class ThreeSocket {
public void threeHole() {  
        System.out.println("三孔插座");  
    }  
}
//已实现的具体类:只提供二孔插座</span>
public class TweSocket implements Socket {
    public void hole() {
        System.out.println("二孔插座");
    }
}
//类适配器实现的具体类:提供继承类的一孔插座
public class OneSocketAdapter extends OneSocket implements Socket{
    @Override
    public void hole() {
        super.oneHole();
    }
}
//对象适配器实现的具体类:提供构造函数传入类参数来匹配插座
class SocketAdapter implements Socket{  
    private ThreeSocket threeSocket = null;  
    private OneSocket oneSocket = null;  

    public SocketAdapter(ThreeSocket threeSocket) {
        this.threeSocket = threeSocket;  
    }

    public SocketAdapter(OneSocket oneSocket) {
        this.oneSocket = oneSocket;  
    }

    public void hole() {   
        if(threeSocket!=null){
            threeSocket.threeHole();
        }
        if(oneSocket!=null){
            oneSocket.oneHole();
        }  
    }  
}
//客户类
public class Client {
    public static void main(String[] args) {  
        //已经实现的具体类:二孔插座
        TweSocket tweSocket = new TweSocket();    
        tweSocket.hole();  
        //对象适配器实现的具体类:三孔插座
        Socket threeSocket = new SocketAdapter(new ThreeSocket());  
        threeSocket.hole();  
        //对象适配器实现的具体类:一孔插座
        Socket oneSocket = new SocketAdapter(new OneSocket());  
        oneSocket.hole(); 

        //类适配器实现的具体类:一孔插座
        OneSocketAdapter oneSocket1 = new OneSocketAdapter();
         oneSocket1.hole();
    } 
}

4.结论:因为java不支持多继承,所以类适配器需要每次重新写适配类来继承已经存在的类和实现目标接口,并在实现接口方法中调用父类的方法来做适配;而对象适配器只要一个适配类是采用直接实现目标接口,然后根据构造函数传入的类来实现接口方法做适配,即已存在类委托适配类来做适配工作。因此,对象适配器更为灵活。
5.参考:http://blog.csdn.net/jason0539/article/details/22468457

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值