您的位置:首页 > 其它

桥接模式

2015-08-05 03:47 375 查看
应用场景:

在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式。

类似于数学中如果一个函数有多个变量,我们就应该保证在同一时刻只能只有一个变量在变化,当这个变量确定了后,在让另一个变量变化。

下面举个例子来说明:

不同的人,不同的做鱼方式,不同的鱼。

这里来实现这个系统。我们可以让先确定一个人,一个人在持有一个做鱼方式来确认一个做鱼方式,一个做鱼方式再来持有一个鱼种类来确定具体的鱼。

这样 以来,多个变量的变化,就变得清晰了,看上去是一个接着一个的吧。

/**

* 有很多种鱼

* @author Administrator

*

*/

public class Fish {

public String name;

public Fish(String name) {

super();

this.name = name;

}

public void setName(String name) {

this.name = name;

}

public Fish() {

super();

}

}



---------------------------------------------------------------

/**

* 有很多种做鱼的方法

* @author Administrator

*

*/

public class Cooker {

public String method;

public Fish fish;

public void setMethod(String method) {

this.method = method;

}

public void setFish(Fish fish) {

this.fish = fish;

}

public Cooker(String method, Fish fish) {

super();

this.method = method;

this.fish = fish;

}

public Cooker() {

super();

}

public void cook(){

System.out.println(method+fish.name);

}

}



-----------------------------------------------------------------------------------

/**

* 有很多种人

* @author Administrator

*

*/

public class People {

public String name;

public Cooker cooker;

public People() {

super();

}

public People(String name, Cooker cooker) {

super();

this.name = name;

this.cooker = cooker;

}

public void cook(){

System.out.print(name+"做了");

cooker.cook();

}

}



-------------------------------------------------------------------------------

/**

* 测试类

* @author Administrator

*

*/

public class Test {

public static void main(String[] args) {

//实现不同的人,烹饪方式不同,烹饪鱼种类不同

People people = null;

Cooker cooker = null;

Fish fish = null;

fish = new Fish("鲢鱼");

cooker = new Cooker("红烧", fish);

people = new People("汤姆",cooker);

people.cook();

fish = new Fish("武昌鱼");

cooker = new Cooker("清蒸", fish);

people = new People("小老鼠",cooker);

people.cook();


}

}



--------------------------------------------------------------

Result:

汤姆做了红烧鲢鱼

小老鼠做了清蒸武昌鱼
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: