设计模式-桥接模式

About 2 minpattermjava

一、对桥接模式的理解

在很多个网站都看到了桥接模式的定义,最直观的理解就是要画正方形、圆形、长方形,画笔有红色、蓝色、紫色。当出现了两个以上的类别(形状、颜色。一个类出现了两个独立的变化的维度,且这两个维度都需要进行扩展)的时候,就可以考虑使用桥接模式了。

桥接模式定义:将抽象部分与实现部分分离,使他们都可以独立的变化。它是一种对象结构型模式,又称为柄体模式或接口模式。

二、 代码实现

创建颜色和形状的api接口,并创建红色、绿色、圆形、正方形等实现各自的接口。

// 颜色api
public interface ColorAPI {
	// 画
	public void Draw();
}
// 红色
class Red implements ColorAPI{
	@Override
	public void Draw() {
		System.out.println("用红色的笔" );
	}
}
// 绿色
class Green implements ColorAPI{
	@Override
	public void Draw() {
		System.out.println("用绿色的笔");
	}
	
}
// 形状api
interface ShapeAPI {
	// 画
	public void Draw();
}
// 圆形
class Circle implements ShapeAPI{
	@Override
	public void Draw() {
		System.out.println("画圆形");
	}
	
}
class Square implements ShapeAPI{
	@Override
	public void Draw() {
		System.out.println("画正方形");
	}
	
}

创建形状的抽象类,与抽象类的实现类

// 形状抽象类
public abstract class Shape {
	ColorAPI colorAPI;
	ShapeAPI shapeAPI;
	Shape(ColorAPI ca ,ShapeAPI sa) {
		this.colorAPI = ca;
		this.shapeAPI = sa;
	}
	// 画的抽象方法
	public abstract void draw();
}
// 形状实现
class ShapeImpl extends Shape{
	
	ShapeImpl(ColorAPI ca, ShapeAPI sa) {
		super(ca, sa);
		// TODO Auto-generated constructor stub
	}
	@Override
	public void draw() {
		this.colorAPI.Draw();
		this.shapeAPI.Draw();
	}
}

main方法运行

public static void main(String[] args) {
		Shape redCircle = new ShapeImpl(new Red(), new Circle());
		Shape greenSquare = new ShapeImpl(new Green(), new Square());
		Shape greenCircle = new ShapeImpl(new Green(), new Circle());
		redCircle.draw();
		greenSquare.draw();
		greenCircle.draw();
	}
	```
	
运行结果

用红色的笔 画圆形 用绿色的笔 画正方形 用绿色的笔 画圆形


## 三、UML类图

  ![Bridge](https://gaoqisen.github.io/GraphBed/201810/20181018205248.png)

## 四、 笔记

> 桥接模式定义: 将抽象个部分与它的实现部分分离,使他们可以独立的变化。它是一种对象结构型模式。

00原则

> 封装变化

> 针对接口编程,不针对实现编程

> 对增加开放,对修改关闭

> 不要来找我,我来找你

> 只对朋友交谈

> 为交互对象之间的松耦合设计而努力

> 多用组合,少用继承

> 类应该只有一个被改变的理由

> 依赖抽象,不依赖具体实现类

github源码:[https://github.com/gaoqisen/java-pattern](https://github.com/gaoqisen/java-pattern) 

Last update:
Contributors: gaoqisen