java 桥接模式_JAVA设计模式之【桥接模式】
橋接模式
蠟筆中顏色和型號(hào)之間存在耦合
毛筆中,顏色和型號(hào)解耦了
如果軟件系統(tǒng)中某個(gè)類存在兩個(gè)獨(dú)立變化的維度,橋接模式可以將兩個(gè)維度分離出來(lái)
角色
抽象類
擴(kuò)充抽象類
實(shí)現(xiàn)類接口
提供基本操作
抽象類定義的接口會(huì)做更多更負(fù)責(zé)的操作
使用關(guān)聯(lián)關(guān)系,替代繼承關(guān)系
具體實(shí)現(xiàn)類
面向?qū)ο笏枷?/p>
單一職責(zé)原則
開(kāi)閉原則
合成復(fù)用原則
里氏替換原則
依賴倒轉(zhuǎn)原則
毛筆案例
毛筆型號(hào)維度
大毛筆
中毛筆
小毛筆
型號(hào)是毛筆的抽象部分,顏色是毛筆的實(shí)現(xiàn)部分
毛筆顏色維度
黑色
紅色
灰色
藍(lán)色
...
毛筆和顏色之間是聚合關(guān)系
圖片案例
Image充當(dāng)抽象類
子類JPGImage,PNGImage、BMPImage和GIFImage充當(dāng)擴(kuò)充抽象類
ImageImp充當(dāng)實(shí)現(xiàn)類接口
子類WindowsImp、LinuxImp、UnixImp充當(dāng)具體實(shí)現(xiàn)類
像素輔助類,Matrix,不同操作系統(tǒng)提供不同的方式顯示像素矩陣
橋接模式可以和適配器模式結(jié)合使用
1.圖片實(shí)現(xiàn)類接口
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.圖片擴(kuò)充抽象類
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.具體實(shí)現(xiàn)類
Windows
package Bridge;
/**
* Created by e550 on 2016/10/3.
*/
public class WindowsImp implements ImageImp{
public void doPaint(Matrix m) {
//調(diào)用Windows系統(tǒng)的繪制函數(shù)繪制像素矩陣
System.out.println("在Windows操作系統(tǒng)中顯示圖像:");
}
}
Linux
package Bridge;
/**
* Created by e550 on 2016/10/3.
*/
public class LinuxImp implements ImageImp{
public void doPaint(Matrix m) {
//調(diào)用Windows系統(tǒng)的繪制函數(shù)繪制像素矩陣
System.out.println("在Linux操作系統(tǒng)中顯示圖像:");
}
}
Unix
package Bridge;
/**
* Created by e550 on 2016/10/3.
*/
public class UnixImp implements ImageImp{
public void doPaint(Matrix m) {
System.out.println("在Unix操作系統(tǒng)中顯示圖像:");
}
}
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(" 日出美景");
}
}
執(zhí)行結(jié)果
在Linux操作系統(tǒng)中顯示圖像:
日出美景,格式為GIF。
再看一個(gè)筆的例子
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接口實(shí)現(xiàn)
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 + "藍(lán)色的" + name + ".");
}
}
4.Pen抽象類實(shí)現(xiàn)
package Bridge.PenColor;
/**
* Created by e550 on 2016/10/3.
*/
public class BigPen extends Pen{
public void draw(String name) {
String penType="大號(hào)毛筆繪制";
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("鮮花");
}
}
執(zhí)行結(jié)果
大號(hào)毛筆繪制藍(lán)色的鮮花
總結(jié)
以上是生活随笔為你收集整理的java 桥接模式_JAVA设计模式之【桥接模式】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java windows域_域环境中的w
- 下一篇: java项目逻辑重要吗_JAVA小项目,