您的位置:首页 > 编程语言 > Java开发

java设计模式——适配器模式

2017-05-04 00:00 211 查看
适配器模式定义: 将两个不兼容的类纠合在一起使用,属于结构型模式,需要有Adaptee(被适配者)和Adaptor(适配器)两个身份.

(1)目标角色(Target):系统所期待实现的目标。
(2)源角色(Adaptee):系统原有的实现,被适配的角色。
(3)适配器角色(Adapter):将原有实现转化成目标实现。
适配器模式包含两种适配方式:类适配器和对象适配器。
类适配器结构图:



类适配器的代码实现:
1、第一个文件目标角色(Target.java)

点击(此处)折叠或打开

public interface Target {

/**

* 源角色也包含的方法

*/

public void operation1();

/**

* 原角色不包含的方法

*/

public void operation2();

}

2、第二个文件源角色:Adaptee.java

点击(此处)折叠或打开

/**

* 原角色实现类

*/

public class Adaptee {

public void operation1(){

System.out.println("operation-1");

}

}

3、第三个文件适配器角色:Adapter.java

点击(此处)折叠或打开

/**

* 适配器角色

*/

public class Adapter extends Adaptee implements Target{

@Override

public void operation2() {

System.out.println("operation-2");

}

}

如上代码为类适配器的实现方式,由于java是单继承语言,某个类适配器只能服务于一个被适配角色,不利于程序的扩展,并且由于是基于继承的方式,源角色的所有和属性和操作都对适配器暴露,也不利于程序的安全和可控。所以类适配器的方式其实在实际开发中比较少用。
下面我们再说下对象适配器的基础实现,如下为其结构图:



对象适配器的代码实现:
4、第一个文件目标角色:Target.java

点击(此处)折叠或打开

/**

* 抽象目标接口

*/

public interface Target {

/**

* 购买游戏道具

*/

public void buyGameProps();

}

5、第二个文件源角色 :Rmb.java

点击(此处)折叠或打开

/**

* 被适配对象

*/

public class Rmb {

/**

* 金额属性

*/

public int money;

/**

* 构造方法

* @param money

*/

public Rmb(int money){

this.money = money;

}

public int getMoney() {

return money;

}

public void setMoney(int money) {

this.money = money;

}

}

6、第三个文件适配器角色:QQCoin.java

点击(此处)折叠或打开

/**

* QQ币实现类(适配器角色)

*/

public class QQCoin implements Target{

/**

* 人民币实体对象

*/

public Rmb rmbImpl;

/**

* QQ币数量

*/

public int count;

/**

* 构造方法

* @param rmb

*/

public QQCoin(Rmb rmb){

this.count = rmb.getMoney() * 10;

}

/**

* 具体实现方法

*/

@Override

public void buyGameProps() {

System.out.println("您购买了 " + count + " 个道具!");

}

}

7、第四个文件:TestMain.java

点击(此处)折叠或打开

/**

* 测试Main方法

*/

public class TestMain {

public static void main(String [] args){

Rmb rmb = new Rmb(5);

QQCoin coin = new QQCoin(rmb);

coin.buyGameProps();

}

}

如上为我们要用人民币买游戏道具,但不能用人民币直接买,必须得借助QQ币才可以买。适配器QQCoin.java中会包含一个被适配的对象,当我们要用这个适配器再适配其他类时,只要在适配器角色中再增加其对象就可以了。
设计模式是一种代码实现的思想,很多时候我们在写代码时要灵活的去运用设计模式切不可生搬硬套设计模式,更不应该硬套某个设计模式的标准代码结构。比如适配器模式,理论上来说凡是对原有代码的封装我们都可以理解成是一种适配的思想。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: