桥接模式

简介: 定义:如果某个类存在两个独立变化的维度,可以运用桥接模式将这两个维度分离出来,使两者可以独立扩展。与多层继承方案不同,它将两个独立变化的维度设计为两个独立的继承等级结构,并且在抽象层建立一个抽象关联,该关联关系就像一条桥一样优点:1.分离抽象接口及其实现部分。提高了比继承更好的解决方案。 2.子类的数目减少了。 3.桥接模式提高了系统的可扩充性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统。缺点:1.提高了系统的复杂度。


定义:如果某个类存在两个独立变化的维度,可以运用桥接模式将这两个维度分离出来,使两者可以独立扩展。与多层继承方案不同,它将两个独立变化的维度设计为两个独立的继承等级结构,并且在抽象层建立一个抽象关联,该关联关系就像一条桥一样

优点:1.分离抽象接口及其实现部分。提高了比继承更好的解决方案。

          2.子类的数目减少了。

          3.桥接模式提高了系统的可扩充性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统。

缺点:1.提高了系统的复杂度。

使用场景:1.一个类需要在两个以上维度扩展,采用继承方式会导致子类数量过多

                  例.如果一个类在两个维度分别有m和n种变化,采用继承的方式就需要扩展出m*n个子类,且一个维度每增加一种变化就多出另一个维度变化总数的子类;如果将两个维度拆分再组合,加起来也只有m+n个子类,且每个维度独立扩展,一个维度增加一种变化只需要增加1个子类。

对比图:原

image.png

桥接模式:

image.png

类图:

image.png

 

通用代码:

第一个维度接口

1. public interface Implementor {
2. void operationImpl();
3. }

第一个维度实现

1. public class ConcreteImplementor implements Implementor {
2. public void operationImpl() {
3. //todo
4.     }
5. }

第二个维度(为抽象类,将第一个维度注入)

1. public abstract class Abstraction {
2. protected Implementor impl; //实现类接口
3. 
4. public void setImpl(Implementor impl){
5. this.impl = impl;
6.     }
7. 
8. public abstract void operation();  //声明抽象业务方法
9. }

第二个维度的实现

1. public class RefinedAbstraction extends Abstraction {
2.     public void operation() {
3. //todo
4.         impl.operationImpl();
5. //todo
6.     }
7. }

栗子

第一个维度接口

1. public interface BallType{
2. 
3. public void ballType();
4. 
5. }

实现

1. public class Basketball implements BallType{
2. 
3. public void ballType(String color){
4.    system.out.print(color+"的篮球")
5. }
6. 
7. }
1. public class Football implements BallType{
2. 
3. public void ballType(String color){
4.    system.out.print(color+"的足球")
5. }
6. 
7. }
1. public class Volleyball implements BallType{
2. 
3. public void ballType(String color){
4.    system.out.print(color+"的排球")
5. }
6. 
7. }

第二个维度的抽象类

1. public abstract class Color{
2.     BallType ballType;
3. 
4. public void setBallType(BallType ballType) {
5. this.ballType = ballType;
6.     }
7. 
8. public abstract void color();
9. }

第二个维度的实现

1. public class Red extends Color{
2. 
3.     public void color() {
4.         ballType.ballType("红色");
5.     }
6. }

调用

1. public class Client {
2. public static void main(String[] args) {
3.         /足球
4. BallType type = new Football();
5. //红色
6. Red red = new Red();
7. //红色足球
8.         red.setBallType(type);
9.         red.color();
10. 
11.     }
12. }

 


相关文章
|
1月前
|
设计模式 Java 开发者
Java设计模式【七】:桥接模式
Java设计模式【七】:桥接模式
26 0
|
1月前
桥接模式
桥接模式
26 0
|
2天前
结构型模式之桥接模式
结构型模式之桥接模式
结构型模式之桥接模式
|
10月前
|
设计模式 Java 数据库连接
|
1月前
|
API 数据库
结构型 桥接模式
结构型 桥接模式
25 0
|
10月前
|
设计模式 C++
2023-6-16-第七式桥接模式
2023-6-16-第七式桥接模式
61 1
|
10月前
|
设计模式 Java 开发者
桥接模式【Java设计模式】
桥接模式【Java设计模式】
53 0
|
10月前
|
设计模式
设计模式之桥接模式(未使用桥接模式、使用桥接模式、源码体现)
设计模式之桥接模式(未使用桥接模式、使用桥接模式、源码体现)
40 0
|
Linux Windows
结构型模式-桥接模式
结构型模式-桥接模式
96 0
|
设计模式
我学会了,桥接模式
桥接模式属于结构型模式,这个类型的设计模式总结出了 类、对象组合后的经典结构,将类、对象的结构和使用解耦了,花式的去借用对象。
96 0
我学会了,桥接模式