/**
* 设计模式(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