适配器模式:兼容外来的猴子

一、模式定义

  • 适配器模式将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。
  • 相关组件
  1. Client:客户端,只与目标接口交互。
  2. Target:适配器实现的目标接口。
  3. Adapter:适配器,使用组合方式包装被适配者。
  4. Adaptee:被适配者,所有的请求都委托给这个类。

二、举例说明

  • 场景:通过创建适配器进行接口转换,让不兼容的接口变成兼容。
  • 具体需求:目前峡谷中的英雄有一个统一的接口类Hero,英雄释放技能都是使用Hero接口中定义的方法。近期又要纳入一位新英雄——齐天大圣。不过,这个英雄的代码是从其他公司收购过来的,未实现我们的Hero接口,而且释放技能的方法与Hero定义的方法完全不同。怎么能改动最小兼容此英雄呢。

三、代码实现

  1. 目前的Hero接口类(目标接口)
    public interface Hero {
        /**
         * 释放Q技能
         */
        void skillQ();
    
        /**
         * 释放W技能
         */
        void skillW();
    }
    
  2. 被收购公司的齐天大圣类(被适配者)
    public class MonkeyKing {
        /**
         * 被收购公司的1技能,对应目标接口的Q节能
         */
        void skill1() {
            System.out.println("猴王技能:粉碎打击!");
        }
    
        /**
         * 被收购公司的2技能,对应目标接口的W节能
         */
        void skill2() {
            System.out.println("猴王技能:真假猴王!");
        }
    }
    
  3. 适配器(可以使用组合或继承被适配者,以下是组合方式)
    public class MonkeyAdapter implements Hero {
        private MonkeyKing monkeyKing;
    
        public MonkeyAdapter(MonkeyKing monkeyKing) {
            this.monkeyKing = monkeyKing;
        }
    
        @Override
        public void skillQ() {
            System.out.println("使用适配器,调用猴子(被适配者)的1技能");
            monkeyKing.skill1();
        }
    
        @Override
        public void skillW() {
            System.out.println("使用适配器,调用猴子(被适配者)的2技能");
            monkeyKing.skill2();
        }
    }
    
  4. 客户端调用
    public static void main(String[] args) {
    	// 1.创建被适配者
    	MonkeyKing monkeyKing = new MonkeyKing();
    	// 2.创建适配器
    	Hero hero = new MonkeyAdapter(monkeyKing);
    	hero.skillQ();
    	hero.skillW();
    }
    

执行结果在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值