Java设计模式 (6) 适配器

/**
 * 设计模式(6)
 * 适配器模式
 * 
 * 该模式多用于业务增加时, 在不修改原有的代码基础上扩充功能时使用
 * 
 * 
 * 比如电脑上原先有个读取A类型卡的接口,但此时想读取B类型的卡.
 * 要怎么做呢?
 * 
 * (*) 如果在开发/重构时,就直接使用桥接模式即可
 * 
 * 如果在正常的迭代/维护中, 为了遵循"开闭原则", 可以:
 * 增加一种转接头(适配器类),如插在电脑上的B类型读卡器(类)
 * 这样,每次内存卡插电脑时, 调用的就是这个读卡器(类)了,而不是原先的电脑上就有的插口
 */
 


// 电脑自带读卡装置 只支持A类型卡
interface CardReader {
    void load(String type);
}

class OriginalCardReader implements CardReader {

    @Override
    public void load(String type) {
        if (type == "A") {
            System.out.println("[A] reading...");
        } else {
            System.out.printf("[%s] unknown device\n", type);
        }
    }
}


// 外部读卡装置 只支持B类型卡
interface AdvancedCardReader {
    void loadB();
}

class ExternalCardReader implements AdvancedCardReader {

    @Override
    public void loadB() {
        System.out.println("[B] reading...");
    }
}


// 适配器类 插入电脑中(可以被调用了)
class CardReaderAdapter implements CardReader {

    @Override
    public void load(String type) {
        if (type == "A") {
            new OriginalCardReader().load(type);
        } else if (type == "B") {
            new ExternalCardReader().loadB();
        }
    }
}


// 测试
// Test Adapter Pattern
public class main {
    public static void main(String[] argv) {
        CardReader cardReader = new CardReaderAdapter();
        cardReader.load("A");
        cardReader.load("B");
    }
}


/*
输出:
    [A] reading...
    [B] reading...
*/

转载于:https://my.oschina.net/tasker/blog/812478

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值