桥接模式
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:
汤姆做了红烧鲢鱼
小老鼠做了清蒸武昌鱼
在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用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:
汤姆做了红烧鲢鱼
小老鼠做了清蒸武昌鱼
相关文章推荐
- hadoop 一些概念介绍
- CMake 教程
- CMake 教程
- 設定 Bootstrap/SASS/Bower/gulp (Windows平台)
- 查找
- 【Android开源项目分析】自定义圆形头像CircleImageView的使用和源码分析
- ISO/IEC 9899:2011 条款6.2.6——类型的表示
- 前端构建工具gulp入门教程
- hadoop 之wordcount
- 前端构建工具gulpjs的使用介绍及技巧
- 不同数据类型的计算
- OC学习笔记14--Foundation之NSString与NSMutableString常用方法
- UVa 10020 - Minimal coverage(区间覆盖并贪心)
- _DataStructure_C_Impl:只有队尾指针的链式循环队列
- _DataStructure_C_Impl:顺序循环队列
- _DataStructure_C_Impl:顺序队列
- Python的MySQLdb模块安装,连接,操作,增删改
- Python的MySQLdb模块安装,连接,操作,增删改
- _DataStructure_C_Impl:后缀表达式
- C语言之文件操作02——输出文本文件中的内容显示在屏幕上