桥接模式是一种将抽象部分与实现部分分离的设计模式,可以在两个独立变化的维度之间增加灵活性。桥接模式的结构图、代码实现和运行结果可以在这里找到。桥接模式的优点是:抽象与实现分离,扩展能力强,符合开闭原则,符合合成复用原则,其实现细节对客户透明;缺点是:由于聚合关系建立在抽象层,要求开发者针对抽象化进行设计与编程,能正确地识别出系统中两个独立变化的维度,这增加了系统的理解与设计难度。
桥接模式(Bridge Pattern)是一种结构型设计模式,它将抽象与实现解耦,使得两者可以独立地变化,桥接模式主要包括以下四个角色:抽象部分(Abstraction)、实现部分(Implementation)、抽象桥梁(Abstraction Bridge)和具体桥梁(Concrete Bridge)。
1、抽象部分(Abstraction):定义一个接口,规定了客户端需要操作的对象的行为。
2、实现部分(Implementation):实现抽象部分接口的具体类,提供了具体的业务逻辑。
3、抽象桥梁(Abstraction Bridge):定义一个接口,规定了抽象部分与实现部分之间的通信方式。
4、具体桥梁(Concrete Bridge):实现抽象桥梁接口的具体类,负责将抽象部分与实现部分连接起来。
下面我们通过一个简单的例子来详细解析桥接模式的用法,假设我们有一个动物园管理系统,其中有两个角色:动物(Animal)和动物管理员(Zookeeper),动物有自己的名字和年龄,而动物管理员负责管理这些动物,在这个系统中,动物是抽象部分,动物管理员是实现部分,而动物园则是抽象桥梁。
我们定义一个动物接口(Animal):
public interface Animal { String getName(); int getAge(); }
我们创建两个实现动物接口的具体类:狮子(Lion)和长颈鹿(Giraffe):
public class Lion implements Animal { @Override public String getName() { return "Lion"; } @Override public int getAge() { return 3; } } public class Giraffe implements Animal { @Override public String getName() { return "Giraffe"; } @Override public int getAge() { return 20; } }
我们定义一个动物管理员接口(Zookeeper),并在动物管理员中使用抽象桥梁来管理动物:
import java.util.ArrayList; import java.util.List; public interface Zookeeper { void addAnimal(Animal animal); List<Animal> getAllAnimals(); }
我们创建一个具体桥梁类(ConcreteZookeeper),用于连接抽象部分和实现部分:
import java.util.ArrayList; import java.util.List; public class ConcreteZookeeper implements Zookeeper { private List<Animal> animals = new ArrayList<>(); @Override public void addAnimal(Animal animal) { animals.add(animal); } @Override public List<Animal> getAllAnimals() { return animals; } }
我们在客户端代码中使用桥接模式:
public class Main { public static void main(String[] args) { Zookeeper zookeeper = new ConcreteZookeeper(); zookeeper.addAnimal(new Lion()); zookeeper.addAnimal(new Giraffe()); zookeeper.addAnimal(new Lion()); // 可以添加多个动物对象,它们之间不会相互影响,因为它们是通过抽象桥梁连接的。 zcck_outline("Get all animals from the zookeeper"); // outline表示输出到控制台的内容,这个方法在下面的代码中被调用,zcck_inout("result", zookeeper.getAllAnimals()); // 将获取到的所有动物对象放入结果变量中。