设计模式之桥接模式

什么是设计模式
设计模式是经常使用、大多数人知道,有特定目录的代码设计经验。设计模式可以提高代码可维护性,可提升代码运行效率,也能提高系统可靠性。设计模式可以分为三类,分别是创建型、结构型和行为型。以下就桥接模式简要概述。

什么是桥接模式
桥接模式就是将抽象化与实现化解耦,使二者可以独立的变化。桥接模式也是属于结构型模式,通过桥接接口将两个独立灵活功能连接起来,大大降低了耦合度。

应用场景
1、一个类有两个灵活变化的维度,而且需要扩展这两个维度
2、需要灵活组装功能,使用继承或实现会产生大量类数量,为了降低类数量的情况

实例分享
比如我们去商店买衣服,衣服可以分为红黄蓝多种颜色,也分为上衣和裤装多种类型。这个时候如果我们单单使用继承等方式去搭配衣服的颜色和类型会很麻烦,但使用桥接模式将衣服类型抽象化,衣服颜色单独实现,则可以任意多种组合产生我们需要的穿搭。

小试牛刀
首先定义一个服饰颜色的接口Color,添加三个RedColor、YellowColor、BlueColor实现类。然后抽象化一个服饰抽象类Cloth并在构造方法传入Color实体,增加两个继承类TrousersCloth、JacketCloth内部调用选择服饰颜色方法。
依赖关系为:
设计模式之桥接模式_第1张图片

1、创建服饰颜色接口并提供红黄蓝三种色系实现类

/**
 * 服装颜色接口
 * @author senfel
 * @version 1.0
 * @date 2022/8/16 14:10
 */
public interface Color {

    /**
     * 选择颜色
     */
    void choice();
}
/**
 * 红色
 * @author senfel
 * @version 1.0
 * @date 2022/8/16 14:12
 */
public class RedColor implements Color{

    @Override
    public void choice() {
        System.err.println(">颜色:红色");
    }
}
/**
 * 黄色
 * @author senfel
 * @version 1.0
 * @date 2022/8/16 14:12
 */
public class YellowColor implements Color{

    @Override
    public void choice() {
        System.err.println(">颜色:黄色");
    }
}
/**
 * 蓝色
 * @author senfel
 * @version 1.0
 * @date 2022/8/16 14:12
 */
public class BlueColor implements Color{

    @Override
    public void choice() {
        System.err.println(">颜色:蓝色");
    }
}

2、提供服饰类型抽象类,添加颜色实体属性。提供选择方法,方法中桥接颜色选择。

/**
 * 衣服抽象类型
 * @author senfel
 * @version 1.0
 * @date 2022/8/16 14:15
 */
public abstract class Cloth {

    /**
     *服饰颜色
     */
    Color color;

    public Cloth(Color color) {
        this.color = color;
    }

    /**
     * 服饰选择
     */
    public abstract void choice();
}
/**
 * 上衣
 * @author senfel
 * @version 1.0
 * @date 2022/8/16 14:20
 */
public class JacketCloth extends Cloth{

    public JacketCloth(Color color) {
        super(color);
    }

    @Override
    public void choice() {
        System.err.println("服饰选择:");
        System.err.println(">类型:上衣");
        //桥接到颜色选择
        color.choice();
    }
}
/**
 * 裤装
 * @author senfel
 * @version 1.0
 * @date 2022/8/16 14:22
 */
public class TrousersCloth extends Cloth{

    public TrousersCloth(Color color) {
        super(color);
    }

    @Override
    public void choice() {
        System.err.println("服饰选择:");
        System.err.println(">类型:裤装");
        //桥接到颜色选择
        color.choice();
    }
}

3、我们可以灵活组装服饰类型和颜色以满足不同需求

/**
 * 桥接模式测试
 * @author senfel
 * @version 1.0
 * @date 2022/8/16 14:23
 */
@SpringBootTest
public class TestBridageModel {

    @Test
    public void test(){
        //选择不同服饰类型不同颜色
        new JacketCloth(new BlueColor()).choice();
        new JacketCloth(new RedColor()).choice();
        new JacketCloth(new YellowColor()).choice();
        new TrousersCloth(new BlueColor()).choice();
        new TrousersCloth(new RedColor()).choice();
        new TrousersCloth(new YellowColor()).choice();
    }

}

测试结果:

服饰选择:
类型:上衣
颜色:蓝色
服饰选择:
类型:上衣
颜色:红色
服饰选择:
类型:上衣
颜色:黄色
服饰选择:
类型:裤装
颜色:蓝色
服饰选择:
类型:裤装
颜色:红色
服饰选择:
类型:裤装
颜色:黄色

你可能感兴趣的:(设计模式,设计模式,桥接模式,bash)