意图
将抽象与抽象方法的实现相互分离来实现解耦,以便二者可以相互地变化。
书上说的太抽象了,直接写个例子,就是人与爱好的例子吧,咱们就将人与爱好分开,可以将人看做是不需要变化的,而爱好是补充的,先写个例子
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() + "吃干饭");
}
}
解耦了。