小菜成長記(八)——適配器模式

寫一個球員進攻程序:
public class Program {
    public static void main(String[] args) {
        Player b = new Forwards("巴蒂爾");
        b.attack();
        Player ym = new Center("姚明");
        ym.defense();
    }
}

// 球員
abstract class Player {
    protected String name;

    public Player(String name) {
        this.name = name;
    }

    public abstract void attack();
    public abstract void defense();
}

// 前鋒
class Forwards extends Player {

    public Forwards(String name) {
        super(name);
    }

    @Override
    public void attack() {
        System.out.println("前鋒 " + name + " 進攻");
    }

    @Override
    public void defense() {
        System.out.println("前鋒 " + name + " 防守");
    }
}

// 中鋒
class Center extends Player {

    public Center(String name) {
        super(name);
    }

    @Override
    public void attack() {
        System.out.println("中鋒 " + name + " 進攻");
    }

    @Override
    public void defense() {
        System.out.println("中鋒 " + name + " 防守");
    }
}

使用適配器改進過後
public class Program {
    public static void main(String[] args) {
        Player b = new Forwards("巴蒂爾");
        b.attack();
        Player ym = new PlayerAdapter("姚明");
        ym.defense();
    }
}

// 球員
abstract class Player {
    protected String name;

    public Player(String name) {
        this.name = name;
    }

    public abstract void attack();
    public abstract void defense();
}

// 前鋒
class Forwards extends Player {

    public Forwards(String name) {
        super(name);
    }

    @Override
    public void attack() {
        System.out.println("前鋒 " + name + " 進攻");
    }

    @Override
    public void defense() {
        System.out.println("前鋒 " + name + " 防守");
    }
}

// 中鋒
class ChinaCenter {
    private String name;

    public ChinaCenter(String name) {
        this.name = name;
    }

    public void jingong() {
        System.out.println("中鋒 " + name + " 進攻");
    }

    public void fangshou() {
        System.out.println("中鋒 " + name + " 防守");
    }
}

class PlayerAdapter extends Player{
    ChinaCenter center = null;

    public PlayerAdapter(String name) {
        super(name);
        center = new ChinaCenter(name);
    }

    @Override
    public void attack() {
        center.jingong();
    }

    @Override
    public void defense() {
        center.fangshou();
    }
}

何時採用:
系統的數據和行爲都正確,但接口不符合,我們應該考慮用適配器,目的是使控制範圍之外的一個原有對象與某個接口匹配。適配器模式主要應用於希望複用一些現存的類,但是接口又與複用環境要求不一致的情況。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章