java常用设计模式九:桥接模式

一、概述

将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式。比如存在2个维度,第一个维度有一个抽象类A和对应的子类A1和A2;第二个维度有另一个接口B和对应的子类B1和B2;接口A依赖接口B。

所谓的独立变化就是当我们修改A1和A2或是修改B1和B2对方都不用修改。这种抽象依赖就像桥接。

二、示例

java常用设计模式九:桥接模式

比如上图所示:动物(抽象类)走路(接口),动物有狗(具体类)和猫(具体类),路有大路(具体类)和小路(具体类),要实现的就是  “什么动物在什么路走路”,这就是一个2维度组合,而且2个维度都可以进行独立变化。

1)动物接口

public interface Animal {
void walk();
}

2)动物实现类

public class Dog implements Animal {
public void walk() {
System.out.println("狗走路");
}
}
public class Cat implements Animal {
public void walk() {
System.out.println("猫走路");
}
}

3)路抽象类

public abstract class Road {
protected Animal animal;
public Road(Animal animal){
this.animal = animal;
}
public abstract void place();
}

4)路的实现类

public class BigRoad extends Road {

    public BigRoad(Animal animal) {
super(animal);
}
public void place() {
System.out.println("在大路上");
animal.walk();
}
}
package bridge.demo;

/**
* @author Administrator
* @date 2019/01/11
*/
public class SmallRoad extends Road{ public SmallRoad(Animal animal) {
super(animal);
} public void place() {
System.out.println("在小路上");
animal.walk();
}
}

5)测试类

public class Client {
public static void main(String[] args){
Animal dog = new Dog();
Animal cat = new Cat();
Road road1= new BigRoad(dog);
Road road2= new SmallRoad(cat);
Road road3= new SmallRoad(dog);
Road road4= new SmallRoad(cat);
road1.place();
road2.place();
road3.place();
road4.place();
}
}
在大路上
狗走路
在小路上
猫走路
在小路上
狗走路
在小路上
猫走路

细心的人会发现:桥接模式与抽象工厂模式很相似,都是2个维度上的变化。但是有以下区别:

  • 桥接模式属于结构型模式,不是以创建对象的为目的,一般对象的创建是交给Client类去new 一个对象,对象已经存在后,怎么来组合使用这些对象;
  • 抽象工厂模式属于创建型模式,以创建对象为目的,一般会在工厂类内部提供new 一个对象的方法。
上一篇:Mongodb cassandra 和 Mysql对比


下一篇:面试阿里被分布式“搞懵”,Redis、MongoDB、memcached没答上来