设计模式——适配器模式

适配器模式是一种设计模式,用于使不同接口的类能够协同工作。通过创建一个适配器类,将原有接口转换为客户期望的接口。例如,中国和外国的电压标准不同,适配器可以解决电器在不同电压环境下工作的难题。在代码示例中,展示了如何使用适配器模式让Robot类能够模拟Person类的行为,从而在Person通道中正常运行。
摘要由CSDN通过智能技术生成

适配器模式是什么?

适配器模式将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。

适配器模式解决什么问题?

我国的电压为220V,但外国的电压大多为110V,导致我国的电器设备在国外开不了机,或者国外的电器设备在我国因电压太大导致报废,此时就需要适配器将电压进行转换。

适配器模式举例

现有Person和Robot接口及它们的实现类:

interface Person {
    void Wear();

    void Hair();
}

interface Robot {
    void NoWear();

    void NoHair();
}

class APerson implements Person {

    @Override
    public void Wear() {
        System.out.println("穿着衣服");
    }

    @Override
    public void Hair() {
        System.out.println("有头发");
    }
}

class ARobot implements Robot {

    @Override
    public void NoWear() {
        System.out.println("穿着铁皮");
    }

    @Override
    public void NoHair() {
        System.out.println("没头发");
    }
}

商场分别开放了给Robot和Person进入的通道

class Shop {
    void ShopForPerson(Person person) {
        person.Hair();
        person.Wear();
    }
    void ShopForRobot(Robot robot){
        robot.NoWear();
        robot.NoHair();
    }
}

调用过程:

Person p=new Person();
Robot r=new Robot();

Shop shop=new Shop();
shop.ShopForPerson(p);
shop.shopForRobot(r);

当Robot想要进入Person通道时,新建RobotDisguisedPerson继承Person,内部维护Robot实例,内部改为调用Robot方法:

class RobotDisguisedPerson implements Person {

    Robot robot;

    public RobotDisguisedPerson(Robot robot) {
        this.robot = robot;
    }

    @Override
    public void Wear() {
        robot.NoWear();
    }

    @Override
    public void Hair() {
        robot.NoHair();
    }
}

调用过程:此时Shop并不知道进去的其实是Robot

Robot r=new Robot();
Person rdp=new RobotDisguisedPerson(r);
Shop shop=new Shop();
shop.ShopForPerson(rdp);

适配器模式最好例子

最好的例子是反迭代器的实现,具体可看Java集合中级——LinkedListed源码解析中反迭代器的源码

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值