绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
【设计模式】Java设计模式 - 桥接模式
2022-09-09 14:56:03
目录


1|1简介

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

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

1|2桥接模式实例

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

举个汽车例子,汽车有多种品牌,也有多种类型,在扩展样式或者品牌的时候互不影响,我们就可以将抽象部分与实现部分分离,使它们都可以独立的变化,让它们独立变化,来减少它们之间耦合。

UML图:
在这里插入图片描述
提供商标接口类,汽车品牌是他的实现类;汽车类是抽象类,汽车的类别通过继承抽象类来分离出来。

1|3代码示例

代码如下:

①、品牌接口

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一步一步调试,还有就是多看看别人的例子。能够有助于理解!谢谢各位观看指点!❤️ ❤️ ❤️

分享好友

分享这个小栈给你的朋友们,一起进步吧。

Java小专栏
创建时间:2019-08-08 21:32:06
Java专栏专注技术分享
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • lihong
    栈主

小栈成员

查看更多
  • 栈栈
  • 杨三百
  • at_1
  • gaokeke123
戳我,来吐槽~