【设计模式】Java设计模式 - 桥接模式

【设计模式】Java设计模式 - 桥接模式-LMLPHP

简介

桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。

这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。

桥接模式实例

桥接模式:将实现和抽象放在两个不同的类层次中,使之各自可以独立改变。
他的主要特点是把抽象与行为分离开来,保持了各自的独立性和扩展。

UML图:
【设计模式】Java设计模式 - 桥接模式-LMLPHP
提供商标接口类,汽车品牌是他的实现类;汽车类是抽象类,汽车的类别通过继承抽象类来分离出来。

代码示例

代码如下:

①、品牌接口

package com.lyd.demo;
/**
 * @Author: lyd
 * @Description: 汽车品牌的接口
 * @Date: 2022-08-28
 */
public interface Brand {
    void info();
    void open();
    void close();
}

②、汽车品牌

继承汽车接口类

package com.lyd.demo.car;

import com.lyd.demo.Brand;

/**
 * @Author: lyd
 * @Description: 奔驰汽车类
 * @Date: 2022-08-28
 */
public class Benz implements Brand {
    private String type;

    public Benz(String type) {
        this.type = type;
    }

    public void info() {
        System.out.println("奔驰汽车->" + type);
    }

    public void open() {
        System.out.println("奔驰汽车");
    }

    public void close() {
        System.out.println("奔驰汽车");
    }
}

红旗汽车类相同,这里就不贴代码,详细代码之后会上传github中。

③、抽象汽车类

通过聚合方式,使用构造法获取品牌对象进行实例化

package com.lyd.demo;
/**
 * @Author: lyd
 * @Description: 汽车抽象类
 * @Date: 2022-08-28
 */
public abstract class Car {
    private Brand brand;
    public Car(Brand brand) {
        this.brand = brand;
    }
    public void info() {
        this.brand.info();
    }
    public void open() {
        this.brand.open();
    }
    public void close() {
        this.brand.close();
    }
}

④、汽车类型子类

继承父类,重写父类方法,这里也调用了父类方法,用打印的方式简单理解

package com.lyd.demo.type;
import com.lyd.demo.Brand;
import com.lyd.demo.Car;
/**
 * @Author: lyd
 * @Description: 新能源
 * @Date: 2022-08-28
 */
public class NewEnergy extends Car {
    public NewEnergy(Brand brand) {
        super(brand);
    }
    public void info() {
        System.out.print("新能源类型汽车 -- ");
        super.info();
    }
    public void open() {
        System.out.print("新能源类型汽车启动 -- ");
        super.open();
    }
    public void close() {
        System.out.print("新能源类型汽车关闭 -- ");
        super.close();
    }
}

⑤、桥接模式测试

通过new汽车类型方式获取汽车对象,其中可得到什么类型什么品牌的汽车

package com.lyd.demo.bridge;
import com.lyd.demo.Car;
import com.lyd.demo.car.Benz;
import com.lyd.demo.car.HongQi;
import com.lyd.demo.type.NewEnergy;
import com.lyd.demo.type.Suv;
/**
 * @Author: lyd
 * @Description: 测试
 * @Date: 2022-08-28
 */
public class BridgeTest {
    public static void main(String[] args) {
        Car banz = new Suv(new Benz("GLA"));
        banz.info();
        banz.open();
        banz.close();
        Car hq = new NewEnergy(new HongQi("H5"));
        hq.info();
        hq.open();
        hq.close();
    }
}

运行结果:
【设计模式】Java设计模式 - 桥接模式-LMLPHP
👍创作不易,如有错误请指正,感谢观看!记得一键三连哦!👍

💓德德小建议:

09-09 15:15