桥模式
来源:互联网 发布:淘宝炉石金币号 编辑:程序博客网 时间:2024/04/29 09:33
定义:将抽象和实际解耦,使得它们可以分别独立的变化。该模式是继承关系的替代方案
用处:可以通过聚合代替继承来解决子类爆炸性增长的问题
应用例子:小说《知北游》里面分为九重天,什么清虚天 等,每一重天又分为许许多多不同的帮派,比如清虚天的碧落赋,罗生天的脉经海殿等等,要是把它们的关系用java或者其他面向对象的语言来抽象表示出来,有两种方案,其中之一是不使用桥模式的方案 ;第二种是使用桥模式的方案
第二种:先设计一个接口(JiuChongSky),然后在设计九个实现类,每个实现类代表一重天,比如Class QingXuSky (implements JiuChongSky)代表清虚天,其余类似;然后对于每一重天的帮派类是派生于每一重天的类,比如清虚天的碧落赋,其类设计成Class BiLuoFu (extends QingXuSky);但是由于每一重天都有很多的帮派,所以每一重天都有很多的子类;其实这样的设计方案将九重天和帮派耦合在一起了,应该讲九重天和帮派解耦,所以为了解耦用桥模式正好适合这样的现象
桥模式的设计方案:
设计两个接口,同样设计一个接口(JiuChongSky),代表九重天,然后设计其九个实现类,比如Class QingXuSky (implements JiuChongSky),其余的各重天都一次实现该接口;然后在设计个帮派的抽象类Gang,每一个帮派都继承了Gang接口,例如Class BiLuoFu extends Gang
代码如下:
/**
*九重天
* @author Arthur
*/
public interface JiuChongSky {
void inform();
}
**********************************************
各重天的代码如下:这里只列举清虚天和罗生天
/**
*清虚天
* @author Arthur
*/
public class QingXuSky implements JiuChongSky{
@Override
public void inform() {
Print.print("清虚天");
}
}
-------------------------------------------------------------------------------
/**
*罗生天"
* @author Arthur
*/
public class LuoShengSky implements JiuChongSky{
@Override
public void inform() {
Print.print("罗生天");
}
}
***********************************************************************
帮派抽象类
/**
*帮派
* @author Arthur
*/
public abstract class Gang {
JiuChongSky jcs;//包含一个九重天的引用
private String name = null;//帮派名称
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Gang(JiuChongSky jcs){
this.jcs = jcs;
this.inform();
}
public void inform(){
jcs.inform();
}
@Override
public String toString(){
return name;
}
}
*************************************************
帮派的子类。
/**
*罗生天脉经海殿
* @author Arthur
*/
public class MaiJingHaiDian extends Gang{
public MaiJingHaiDian(JiuChongSky jcs) {
super(jcs);
this.setName("脉经海殿");
}
}
----------------------------------------------------------------------------
/**
*清虚天的音煞派
* @author Arthur
*/
public class YinSha extends Gang{
public YinSha(JiuChongSky jcs) {
super(jcs);
this.setName("音煞派");
}
}
-------------------------------------------------------------------
/**
*清虚天首席帮派碧落赋
* @author Arthur
*/
public class BiLuoFu extends Gang{
public BiLuoFu(JiuChongSky jcs) {
super(jcs);
this.setName("碧落赋");
}
}
---------------------------------------------------------------------------
/**
*罗生天的兵器甲御派
* @author Arthur
*/
public class BingQiJiaYu extends Gang{
public BingQiJiaYu(JiuChongSky jcs) {
super(jcs);
this.setName("兵器甲御派");
}
}
-----------------------------------------------------------------------------------
客户端代码
/**
*
* @author Arthur
*/
public class Client {
public static void main(String args[]){
Gang g = new BiLuoFu(new QingXuSky());
Print.print(g);
Gang g1 = new MaiJingHaiDian(new LuoShengSky());
Print.print(g1);
}
}
****************************************************
运行结果:
清虚天碧落赋
罗生天脉经海殿
- 设计模式:适配器模式,桥接模式
- 桥模式
- 桥模式
- 桥模式
- 桥模式
- 设计模式----桥接模式
- 设计模式---桥接模式
- 结构性模式-桥接模式
- 设计模式:桥接模式
- 设计模式之-桥模式
- 设计模式 桥接模式
- 策略模式VS桥模式
- 设计模式 - 桥接模式
- 设计模式--桥接模式
- 设计模式--桥接模式
- 桥模式和组合模式
- 设计模式 - 桥接模式
- 设计模式-桥接模式
- OpenGL函数参考
- delphi2007下安装vclskin插件
- 我们真的都是哲学家?
- SVG的渲染顺序
- 杭电1017题
- 桥模式
- HDU-1869 最短路 FLOYD
- 黑马程序员_&& || 及与或的短路
- 4月7日实习笔试的一点感想
- Linux 切换用户
- 一道狗血的ACM题:Poker Hands
- QT安装过程中遇到的各种问题
- Linux tar 解压 命令
- 黑马程序员_构造方法和构造方法的重载