意圖
將抽象與抽象方法的實現相互分離來實現解耦,以便二者可以相互地變化。
書上說的太抽象了,直接寫個例子,就是人與愛好的例子吧,咱們就將人與愛好分開,可以將人看做是不需要變化的,而愛好是補充的,先寫個例子
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() + "吃乾飯");
}
}
解耦了。