橋接模式 蠟筆中顏色和型號之間存在耦合 毛筆中,顏色和型號解耦了 如果軟件系統中某個類存在兩個獨立變化的維度,橋接模式可以將兩個維度分離出來 角色 抽象類 擴充抽象類 實現類接口 提供基本操作 抽象類定義的接口會做更多更負責的操作 使用關聯關系,替代繼承關系 具體實現類 面向對象思想 單一職責原則 開閉原則 合成復用原則 里氏替換原則 依賴倒轉原則 毛筆案例 毛筆型號維度 大毛筆 中毛筆 小毛筆 型號是毛筆的抽象部分,顏色是毛筆的實現部分 毛筆顏色維度 黑色 紅色 灰色 藍色 ... 毛筆和顏色之間是聚合關系 圖片案例 Image充當抽象類 子類JPGImage,PNGImage、BMPImage和GIFImage充當擴充抽象類 ImageImp充當實現類接口 子類WindowsImp、LinuxImp、UnixImp充當具體實現類 像素輔助類,Matrix,不同操作系統提供不同的方式顯示像素矩陣 橋接模式可以和適配器模式結合使用
1.圖片實現類接口
package Bridge;
/**
* Created by e550 on 2016/10/3.
*/
public interface ImageImp {
public void doPaint(Matrix m);
}
2.圖片抽象類
package Bridge;
/**
* Created by e550 on 2016/10/3.
*/
abstract class Image {
protected ImageImp imp;
public void setImageImp(ImageImp imp) {
this.imp = imp;
}
public abstract void parseFile(String fileName);
}
3.圖片擴充抽象類
JPG
package Bridge;
/**
* Created by e550 on 2016/10/3.
*/
public class JPGImage extends Image{
public void parseFile(String fileName) {
Matrix m = new Matrix();
imp.doPaint(m);
System.out.println(fileName + ",格式為JPG");
}
}
PNG
package Bridge;
/**
* Created by e550 on 2016/10/3.
*/
public class PNGImage extends Image{
public void parseFile(String fileName) {
Matrix m = new Matrix();
imp.doPaint(m);
System.out.println(fileName + ",格式為PNG。");
}
}
GIF
package Bridge;
/**
* Created by e550 on 2016/10/3.
*/
public class GIFImage extends Image{
public void parseFile(String fileName) {
Matrix m = new Matrix();
imp.doPaint(m);
System.out.println(fileName + ",格式為GIF。");
}
}
BMP
package Bridge;
/**
* Created by e550 on 2016/10/3.
*/
public class BMPImage extends Image{
public void parseFile(String fileName) {
Matrix m = new Matrix();
imp.doPaint(m);
System.out.println(fileName + ",格式為BMP。");
}
}
4.具體實現類
Windows
package Bridge;
/**
* Created by e550 on 2016/10/3.
*/
public class WindowsImp implements ImageImp{
public void doPaint(Matrix m) {
//調用Windows系統的繪制函數繪制像素矩陣
System.out.println("在Windows操作系統中顯示圖像:");
}
}
Linux
package Bridge;
/**
* Created by e550 on 2016/10/3.
*/
public class LinuxImp implements ImageImp{
public void doPaint(Matrix m) {
//調用Windows系統的繪制函數繪制像素矩陣
System.out.println("在Linux操作系統中顯示圖像:");
}
}
Unix
package Bridge;
/**
* Created by e550 on 2016/10/3.
*/
public class UnixImp implements ImageImp{
public void doPaint(Matrix m) {
System.out.println("在Unix操作系統中顯示圖像:");
}
}
5.客戶端
package Bridge;
/**
* Created by e550 on 2016/10/3.
*/
public class Client {
public static void main(String args[]) {
Image image;
ImageImp imp;
image = new GIFImage();
imp = new LinuxImp();
image.setImageImp(imp);
image.parseFile(" 日出美景");
}
}
執行結果
在Linux操作系統中顯示圖像:
日出美景,格式為GIF。
再看一個筆的例子
1.Color接口
package Bridge.PenColor;
/**
* Created by e550 on 2016/10/3.
*/
public interface Color {
void bepaint(String penType,String name);
}
2.Pen抽象類
package Bridge.PenColor;
/**
* Created by e550 on 2016/10/3.
*/
public abstract class Pen {
protected Color color;
public void setColor(Color color) {
this.color = color;
}
public abstract void draw(String name);
}
3.Color接口實現
package Bridge.PenColor;
/**
* Created by e550 on 2016/10/3.
*/
public class Black implements Color{
public void bepaint(String penType,String name) {
System.out.println(penType + "黑色的" + name + ".");
}
}
package Bridge.PenColor;
/**
* Created by e550 on 2016/10/3.
*/
public class Blue implements Color{
public void bepaint(String penType,String name) {
System.out.println(penType + "藍色的" + name + ".");
}
}
4.Pen抽象類實現
package Bridge.PenColor;
/**
* Created by e550 on 2016/10/3.
*/
public class BigPen extends Pen{
public void draw(String name) {
String penType="大號毛筆繪制";
this.color.bepaint(penType,name);
}
}
package Bridge.PenColor;
/**
* Created by e550 on 2016/10/3.
*/
public class MiddlePen extends Pen{
public void draw(String name) {
String penType = "中型筆繪制";
this.color.bepaint(penType,name);
}
}
package Bridge.PenColor;
/**
* Created by e550 on 2016/10/3.
*/
public class SmallPen extends Pen{
public void draw(String name) {
String penType = "小型筆繪制";
this.color.bepaint(penType,name);
}
}
5.客戶端
package Bridge.PenColor;
/**
* Created by e550 on 2016/10/3.
*/
public class Client {
public static void main(String args[]) {
Color color;
Pen pen;
color = new Blue();
pen = new BigPen();
pen.setColor(color);
pen.draw("鮮花");
}
}
執行結果
大號毛筆繪制藍色的鮮花