java设计模式---桥接模式
桥接模式的英文是 Bridge ,桥接模式关注抽象的设计。抽象是指包含了一组抽象方法的类,这些抽象方法可能包含多个实现。实现抽象的一般做法是创建类的层次结构,该层次结构的顶部是一个包含抽象方法的抽象类,该类的每一个子类都提供这些抽象方法的不同实现。但是,当需要对该层次进行子类化时,这一做法就存在不足了。
你可以创建一个桥,然后把这些抽象方法移到接口中,这样,抽象就依赖于接口的实现。
桥接模式的意图是:将抽象与抽象方法的实现相互分离来实现解耦,以便二者可以相互独立的变化。
上面这段话的意思就是说实现与抽象相分离。
下面举个例子说明:
1.现在水果里有 苹果和橘子
2.人分为 男人和女人
3.人都可以吃水果,所以有 2*2 = 4 中情况
如果我们不用桥接模式,那么实现这么多情况就需要一个一个的去实现,也就是4类,那么我们使用桥接模式呢?答案是:2类。这在条件和实现比较多的情况下优势会更明显。
具体的实现:
下面首先给出实现的UML图
实现的代码和说明如下:
1.Fruit类
[java]
package com.brucezhang.bridge;
public abstract class Fruit {
/**
* 抽象方法
* @param People
* */
public abstract void eatFruit(People people);
}
package com.brucezhang.bridge;
public abstract class Fruit {
/**
* 抽象方法
* @param People
* */
public abstract void eatFruit(People people);
}
这是一个抽象类,是所有水果的抽象,其中的一个抽象方法是对水果执行的动作,也就是将来我们需要对水果执行的操作,参数是人。
2.Apple类
[java]
package com.brucezhang.bridge;
public class Apple extends Fruit{
@Override
public void eatFruit(People people) {
// TODO Auto-generated method stub
System.out.println(people.getType() + " eat apple !");
}
}
package com.brucezhang.bridge;
public class Apple extends Fruit{
@Override
public void eatFruit(People people) {
// TODO Auto-generated method stub
System.out.println(people.getType() + " eat apple !");
}
}
3.Oranger类
[java]
package com.brucezhang.bridge;
public class Oranger extends Fruit{
@Override
public void eatFruit(People people) {
// TODO Auto-generated method stub
System.out.println(people.getType() + " eat oranger !");
}
}
package com.brucezhang.bridge;
public class Oranger extends Fruit{
@Override
public void eatFruit(People people) {
// TODO Auto-generated method stub
System.out.println(people.getType() + " eat oranger !");
}
}
这两个类都是水果类的具体实现,都代表的具体的东西,其中需要重载水果类中的抽象方法,且各自都有各自不同的实现。
4.People类
[java]
package com.brucezhang.bridge;
public abstract class People {
private String type;
private Fruit fruit;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Fruit getFruit() {
return fruit;
}
public void setFruit(Fruit fruit) {
this.fruit = fruit;
}
//抽象方法
public abstract void eat();
}
package com.brucezhang.bridge;
public abstract class People {
private String type;
private Fruit fruit;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Fruit getFruit() {
return fruit;
}
public void setFruit(Fruit fruit) {
this.fruit = fruit;
}
//抽象方法
public abstract void eat();
}
这个类是抽象的人,里面有两个参数,一个参数是水果,一个参数是类型(代表是男人或是女人)
5.Man类
[java]
package com.brucezhang.bridge;
public class Man extends People{
public Man(){
setType("Man");
}
@Override
public void eat() {
// TODO Auto-generated method stub
getFruit().eatFruit(this);
补充:软件开发 , Java ,