Java设计模式 - 桥接模式
😄 生命不息,写作不止
🔥 继续踏上学习之路,学之分享笔记
👊 总有一天我也能像各位大佬一样
🏆 一个有梦有戏的人 @怒放吧德德
🌝分享学习心得,欢迎指正,大家一起学习成长!
简介
桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。
这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。
桥接模式实例
桥接模式:将实现和抽象放在两个不同的类层次中,使之各自可以独立改变。
他的主要特点是把抽象与行为分离开来,保持了各自的独立性和扩展。
举个汽车例子,汽车有多种品牌,也有多种类型,在扩展样式或者品牌的时候互不影响,我们就可以将抽象部分与实现部分分离,使它们都可以独立的变化,让它们独立变化,来减少它们之间耦合。UML图:
提供商标接口类,汽车品牌是他的实现类;汽车类是抽象类,汽车的类别通过继承抽象类来分离出来。
代码示例
代码如下:
①、品牌接口
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();
}
}
运行结果:
👍创作不易,如有错误请指正,感谢观看!记得一键三连哦!👍
💓德德小建议:
理解设计模式不是一件简单的事情,需要不断的学习和动手去练习,才能理解。只有掌握好设计模式,才能够真正的理解SpringAOP和Mybatis的底层原理。各位读者可以和我一样,动手敲一敲代码,甚至用不同的例子来做,通过debug一步一步调试,还有就是多看看别人的例子。能够有助于理解!谢谢各位观看指点!❤️ ❤️ ❤️