Java設計模式之橋接模式(Bridge)

意圖
將抽象與抽象方法的實現相互分離來實現解耦,以便二者可以相互地變化。
書上說的太抽象了,直接寫個例子,就是人與愛好的例子吧,咱們就將人與愛好分開,可以將人看做是不需要變化的,而愛好是補充的,先寫個例子

package com.heimao.bridge;
//實現人的老大類
public abstract class Person {
    private String name;
    //set方法傳參
    public void setName(String name){
        this.name = name;
    }
    //給一個返回姓名
    public String getName(){
        return this.name;
    }
}
//寫兩個不同的人
//一個叫黑貓的傢伙
package com.heimao.bridge;
public class Heimao extends Person{
    //需要構造函數傳參數
    public Heimao() {
        setName("黑貓");
    }

}
//還有一個叫zz的帥b
package com.heimao.bridge;
public class ZZ extends Person{
    public ZZ(){
        setName("zz");
    }
}
//寫個愛好的老大
package com.heimao.bridge;
public interface Hobby {
    //某人喜歡啥,總要將人傳進去,具體類具體實現愛好!
    public void hobby(Person person);
}
//兩個具體的愛好
//足球
package com.heimao.bridge;
public class Football implements Hobby{

    @Override
    public void hobby(Person person) {
        System.out.println(person.getName() + "喜歡踢足球");
    }
}
//游泳
package com.heimao.bridge;

public class Swim implements Hobby{

    @Override
    public void hobby(Person person) {
        System.out.println(person.getName() + "喜歡游泳!");
    }

}
//寫個Test
package com.heimao.bridge;

public class Test {
    //先初始化人
    public static void main(String[] args) {
        Person heimao = new Heimao();
        Person zz = new ZZ();
        //愛好類
        Hobby football = new Football();
        Hobby swim = new Swim();
        //調用
        football.hobby(heimao);
        football.hobby(zz);
        swim.hobby(heimao);
        swim.hobby(zz);
    }

}

這樣實現了愛好與人的分離,現在我要補充一個,不是人與愛好了,人與吃飯。人是不是可以不用變了呢,這裏就只用寫吃飯的這個就行了,這樣就將抽象與抽象的實現分離了。下面是吃飯的實現

//吃飯的老大
package com.heimao.bridge;

public interface Eat {
    public void eat(Person person);
}
//吃稀飯
public class EatXifan implements Eat {

    @Override
    public void eat(Person person) {
        System.out.println(person.getName() + "吃稀飯");
    }

}
//吃乾飯
package com.heimao.bridge;

public class EatGanfan implements Eat{

    @Override
    public void eat(Person person) {
        System.out.println(person.getName() + "吃乾飯");
    }

}

解耦了。

發佈了36 篇原創文章 · 獲贊 30 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章