“戏”说设计模式——适配器模式

首先请出今天的主人公——“手机生命源”电源插座

 

在日常生活中,适配器随处可见,比如电源适配器、三角架基座转接部件、USB与串口的转接设备等。

大家最熟悉应该是手机充电时使用的电源适配器

我国家庭用电为220V,就是从电源插座中的电压是220V的,但是我们的手机不能承受220V的电压,这时就需要用手机电源适配器来变压,比如编者的手机电压为最大5V,电源适配器就会变压至5V,过大的电压会导致手机硬件的不可逆损坏。

小时候晚上我在家学习,开着台灯,但是需要手机充电,但是插座没有地方插了,因为台灯是两项插头,二手机充电器也是两项插头,而插座只用一个两项插头,一时找不到办法就请教了我的爸爸。

爸爸想了一下,说:“以后也经常用台灯,手机也得充电,而这个三项插头没什么用”。于是我爸竟然将台灯的插头硬生生的掰成了“八”字,符合看三项插头的位置。插了进去,竟然台灯亮了。

长大以后思考这个问题,虽然问题解决了,但是很暴力啊,这不符合设计模式的初衷,设计模式从它诞生以来一直是致力于方便快捷的解决各项问题,而这种暴力的事情与设计模式的初衷背道而驰。所以如果发明一个转换接口问题不就解决了吗?

public interface TwoCha {//两项插座
    public void electricity(String left,String right);
}//一左一右

public interface ThreeCha {//三项插座
    public void electricity(String left,String right,String land);
}//一左一右,上接地

 我们的台灯使用的是两项插座,将台灯命名为Desklamp

public class Desklamp implements ThreeCha{//台灯,实现两项接口
    @Override
    public void electricity(String left, String right, String land) {
        System.out.println("台灯亮了");
    }
}

下面我们发明一个适配器,完美解决了用暴力解决的办法,使用Adapter解决两项和三项的问题。

public class Adapter implements ThreeCha{//适配器,三项插座的接口
    //引入了两项插座
    private TwoCha twoCha;
    //创建适配器的时候,需要把双插插座接入进来
    public Adapter(TwoCha twoCha) {
        this.twoCha = twoCha;
    }
    //使用实现
    @Override
    public void electricity(String left, String right, String land) {
        //当使用两项时,接地线就会被抛弃
        twoCha.electricity(left,right);
    }
}

在我们发明的适配器中,我们看到第三行引入了两项插座,所以这个适配器支持两项,第五行中,我们的适配器不考虑什么电器的型号,只要是两项插座就能使用适配器,在第十行中,实现了三项插座的接入的功能,而第十二中实现了“将两项插头暴力掰成“八”字的行为”,让两项插头可以匹配三项插座。

现在你已经学会了如何使用对象适配,还有一种方式为类适配器,让我们来看看它如何使用

public class ClassAdapter extends Desklamp implements ThreeCha {
    //继承了台灯类
    @Override
    public void electricity(String left, String right, String land) {
        super.electricity(left, right);
    }
}

这里并没有注入两项插座,而是直接将台灯继承了,这样就直接调用了父类。

我们看到插座问题被我们完美解决了,这仅仅用了适配器,但是如果我们使用暴力的方法,第一它很危险,第二不符合设计模式的基本原则“开闭原则”。

这里补充一个知识点:开闭原则 

(1)对于扩展是开放的(Open for extension)。这意味着模块的行为是可以扩展的。当应用的需求改变时,我们可以对模块进行扩展,使其具有满足那些改变的新行为。也就是说,我们可以改变模块的功能。

(2)对于修改是关闭的(Closed for modification)。对模块行为进行扩展时,不必改动模块的源代码或者二进制代码。模块的二进制可执行版本,无论是可链接的库、DLL或者.EXE文件,都无需改动。

结语:在开发过程中,复杂的逻辑结构就需要匹配程度更高的适配器。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值