文章目录
- 前言
- 一、介绍
- 二、详细分析
- 1.核心组成
- 2.实现步骤
- 3.代码示例
- 4.优缺点
- 优点
- 缺点
- 5.使用场景
- 总结
前言
桥接模式是将抽象部分与实现部分分离,使它们都可以独立的变化。
一、介绍
桥接模式是结构型设计模式,主要是将抽象部分与实现部分分离,使它们都可以独立的变化。桥接模式主要目的是通过组合的方式建立两个类之间的联系,而不是继承。通俗来讲是通过组合来桥接其它的行为/维度。
二、详细分析
1.核心组成
-
抽象化角色 :主要负责定义出该角色的行为 ,并包含一个对实现化对象的引用。
-
扩展抽象化角色 :是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法。
-
实现化角色 :定义实现化角色的接口,包含角色必须的行为和属性,并供扩展抽象化角色调用。
-
具体实现化角色 :给出实现化角色接口的具体实现。
-
2.实现步骤
- 先创建实现角色接口;
- 创建实现角色的具体实现类;
- 创建抽象角色,持有实现角色接口类;
- 创建抽象角色扩展类,继承抽象角色。
3.代码示例
实现角色类
/**
* 实现角色类
*/
public interface CatColour {
/**
* 获取颜色
*/
void getColour();
}
具体实现角色类
/**
* 接口实现类
*/
public class RedCatColour implements CatColour{
@Override
public void getColour() {
System.out.println("红色");
}
}
public class SkyBlueCatColour implements CatColour{
@Override
public void getColour() {
System.out.println("天蓝色");
}
}
抽象角色类
/**
* 抽象类接口
*/
public abstract class Cat {
// 将接口作为一个属性来修饰 抽象类
protected CatColour catColour;
// set方法设置属性Ca
public void setCatColour(CatColour catColour) {
this.catColour = catColour;
}
/**
* 行驶汽车
*/
abstract void run();
}
抽象扩展实现类
/**
* 抽象实现类
*/
public class XiaomiSu7Cat extends Cat{
public XiaomiSu7Cat(CatColour colour) {
super.setCatColour(colour);
}
@Override
void run() {
catColour.getColour();
System.out.println("小米su7");
}
}
public class BmwCat extends Cat{
public BmwCat(CatColour catColour) {
super.setCatColour(catColour);
}
@Override
void run() {
catColour.getColour();
System.out.println("宝马车");
}
}
测试类
public static void main(String[] args) {
XiaomiSu7Cat xiaomiSu7Cat = new XiaomiSu7Cat(new SkyBlueCatColour());
xiaomiSu7Cat.run();
}
结果
4.优缺点
优点
-
抽象和实现的分离。桥接模式使用"对象间的关联关系"解耦了抽象和实现之间固有的绑定关系,使得抽象和实现可以沿着各自的维度来变化。
-
优秀的扩展能力。桥接模式提高了系统的扩展性,在两个变化维度中任意扩展一个维度都不需要修改原有系统,符合开闭原则。
缺点
- 增加系统的理解与设计难度。由于关联关系建立在抽象层,要求开发者一开始就要对抽象层进行设计和编程。
5.使用场景
-
系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性;
-
不想使用继承导致类的个数急剧增加。
总结
以上就是今天的内容了,本文简单介绍了桥接设计模式的使用和优缺点,提供代码示例以供参考。