当前位置:编程学习 > JAVA >>

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 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,