结构型设计模式--桥接模式(Bridge)

系统 1691 0

桥接模式 (Bridge)


    将抽象部分与实现部分分离,使它们都可以独立的变化。


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


    效果及实现要点:
    (1) Bridge模式使用“对象间的组合关系”解耦了抽象和实现之间固有的绑定关系,使得抽象和实现可以沿着各自的维度来变化。


    (2) Bridge模式的应用一般在“两个非常强的变化维度”,有时候即使有两个变化的维度,但是某个方向的变化维度并不剧烈——换言之两个变化不会导致纵横交错的结果,并不一定要使用Bridge模式。

 

结构型设计模式--桥接模式(Bridge)

 

    拿汽车在路上行驶的来说。即有小汽车又有公共汽车,它们都不但能在市区中的公路上行驶,也能在高速公路上行驶。这你会发现,对于交通工具(汽车)有不同的类型,然而它们所行驶的环境(路)也在变化,在软件系统中就要适应两个方面的变化?怎样实现才能应对这种变化呢?

    // 抽象路
public abstract class AbstractRoad {
	protected AbstractCar car;

	public AbstractCar getCar() {
		return car;
	}

	public void setCar(AbstractCar car) {
		this.car = car;
	}

	public abstract void run();
}

// 高速公路
public class SpeedWay extends AbstractRoad {
	public void run() {
		car.run();
		System.out.println("高速公路上行驶");
	}
}

// 市区街道
public class Street extends AbstractRoad {
	public void run() {
		car.run();
		System.out.println("市区街道上行驶");
	}
}

// 抽象汽车
public abstract class AbstractCar {
	public abstract void run();
}

// 小汽车;
public class Car extends AbstractCar {
	public void run() {
		System.out.println("小汽车在");
	}
}

// 公共汽车
public class Bus extends AbstractCar {
	public void run() {
		System.out.println("公共汽车在");
	}
}

public class Client {
	public static void main(String[] args) {
		// 小汽车在高速公路上行驶;
		AbstractRoad road1 = new SpeedWay();
		road1.setCar(new Car());
		road1.run();
		// 公共汽车在高速公路上行驶;
		AbstractRoad road2 = new SpeedWay();
		road2.setCar(new Bus());
		road2.run();
	}
}
  

    

    增加一个维度"人",不同的人开着不同的汽车在不同的路上行驶(三个维度)

    public abstract class People {
	protected AbstractRoad road;

	public AbstractRoad getRoad() {
		return road;
	}

	public void setRoad(AbstractRoad road) {
		this.road = road;
	}

	public abstract void run();
}

public class Man extends People {
	public void run() {
		System.out.println("男人开着");
		road.run();
	}
}

public class WoMan extends People {
	public void run() {
		System.out.println("女人开着");
		road.run();
	}
}

public class Client {
	public static void main(String[] args) {
		// 男人开着公共汽车在高速公路上行驶;
		AbstractRoad road3 = new SpeedWay();
		road3.setCar(new Bus());
		People p = new Man();
		p.setRoad(road3);
		p.run();
	}
}

  

 

    桥接模式很好的符合了开放-封闭原则和优先使用合成(而不是继承)这两个面向对象原则组合模式 

结构型设计模式--桥接模式(Bridge)


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论