在现实生活中,某些类具有两个或多个维度的变化,如图形既可按形状分,又可按颜色分。
桥接模式将抽象部分与它的实现部分分离开来,使他们都可以独立变化,它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。
下面我们就通过桥接模式来创建不同颜色不同形状的图形。
桥接模式的实现:
1. 创建一个颜色接口
//颜色接口
public interface Color {
//对传入的图形上色
public void colorByShape();
}
2. 创建三种颜色
//红色
public class Red implements Color {
@Override
public void colorByShape() {
System.out.print("红色的");
}
}
//绿色
public class Green implements Color {
@Override
public void colorByShape() {
System.out.print("绿色的");
}
}
//彩色
public class Rainbow implements Color {
@Override
public void colorByShape() {
System.out.print("彩色的");
}
}
3. 创建形状抽象类
//形状抽象类
public abstract class Shape {
Color color;
public abstract void draw(); //画形状
public void setColor(Color color) {
this.color = color;
}
}
4. 创建三种具体的形状
//圆形
public class Circle extends Shape {
@Override
public void draw() {
this.color.colorByShape();
System.out.println("圆形的");
}
}
//三角形
public class Triangle extends Shape {
@Override
public void draw() {
this.color.colorByShape();
System.out.println("三角形的");
}
}
//矩形
public class Rectangle extends Shape {
@Override
public void draw() {
this.color.colorByShape();
System.out.println("矩形的");
}
}
5. 给形状上颜色(桥接)
public class BridgeMain {
public static void main(String[] args) {
Color red = new Red(); //红色
Shape circle = new Circle(); //圆形
circle.setColor(red);
circle.draw(); //画红色的圆形
Color rainbow = new Rainbow(); //彩色
Shape triangle = new Triangle(); //三角形
triangle.setColor(rainbow);
triangle.draw(); //画彩色的三角形
}
}
前面的几节供大家参考:
- 什么是设计模式:【每天一个java设计模式(零)】 - 设计模式基本概念及七大设计原则
- 工厂模式:【每天一个java设计模式(一)】 - 工厂模式
- 抽象工厂模式: 【每天一个java设计模式(二)】 - 抽象工厂模式
- 单例模式:【每天一个java设计模式(三)】 - 单例模式
- 原型模式:【每天一个java设计模式(四)】 - 原型模式
- 建造者模式: 【每天一个java设计模式(五)】 - 建造者模式
- 适配器模式 : 【每天一个java设计模式(六)】 - 适配器模式
- 代理模式: 【每天一个java设计模式(七)】 - 代理模式
下一节:
装饰器模式:【每天一个java设计模式(九)】 - 装饰器模式