设计模式--适配器模式

实例:现在有的物品是: 二相插孔、电脑(只支持三相插头),其中,电脑的供电只能有三相插头的供电方法进行。问题是怎么给电脑供电。所以,我们借助了一个适配器(二相转三相)实现三相插头的供电方法,而这个适配器本质上是输入二相,转化为三相,所以,构建这个适配器需要一个二相插孔参数,适配器实现的三相供电方法,其实就是在方法里使用了二相插孔的供电方法,这样,笔记本就有电了。。
定义:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。
模式中的角色:

  1. 目标接口(Target):客户所期待的接口(三相)。目标可以是具体的或抽象的类,也可以是接口。
  2. 需要适配的类(Adaptee):需要适配的类或适配者类。(二相)
  3. 适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。(二相转三相)

类适配器模式(多继承)和对象适配器模式

这里写图片描述

public class ObjectAdapter implements Target
{
    private Adaptee adaptee;

    public ObjectAdapter(Adaptee adaptee)
    {
        this.adaptee = adaptee;
    }

    @Override
    public void request()
    {
        this.adaptee.specificRequest();
    }
}

测试代码:

 Target adapter = new ObjectAdapter(new Adaptee());
 adapter.request();

默认适配器

当你想实现一个接口但又不想实现接口中所有的方法,只想去实现一部分方法时,就用到了默认适配器模式。
解决方案
在接口和具体实现类中添加一个抽象类,而用抽象类是实现目标接口的所有方法。而具体的实现类只需要覆盖其需要完成的方法即可。
举例:1 接口类(有许多方法:吃,睡,工作以及锻炼,但是我懒只想吃喝睡)

public interface Live
{
    void sleep();
    void eat();
    void work();
    void train();
}

2 抽象类:

public class LiveDefault implements Live
{
    @Override public void sleep(){}

    @Override public void eat(){}

    @Override public void work(){}

    @Override public void train(){}
}

3 实现类

public class LiveImpl extends LiveDefault
{
    @Override
    public void eat()
    {
        System.out.println("哇塞,好好吃");
    }

    @Override
    public void sleep()
    {
        System.out.println("好困,就是不想起床");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值