java五种常用设计模式(java设计模式桥接模式最详细讲解)

为什么要使用设计模式?说到底还是为了程序拓展和移植性,无法就是那几种设计思想

单一职责原则 , 开闭原则 里氏替换原则 ,依赖倒置原则,接口隔离原则,组合复用原则 迪米特法则这些思想和原则就是为了帮助我们更好规范地写出简洁,高效易拓展的程序,原理理解很抽象。

我们来谈谈桥接模式:

桥接模式属于结构性设计模式,所谓结构性就好比一个工程的图纸,你前期必须得设计好,且主体是不让修改的,所以结构是不允许变化的,至于你具体怎么施工,不同的工种根据结构图纸进行施工,总不能你基础打好了,你说你要改结构这不现实,所以结构理论是不允许修改,如果你非得修改那么就重建,代码也一样,重构。

应用设计场景:你是某个公司的员工,你有很多同事,但是同事都做着不同的工作和任务,但是老板每天需要关注你们的工作进度和情况,那么你和同事都是同属于一个公司,但是相同的事情都是需要上班工作,只是工作内容不同,都是在给公司创造价值;

工作任务,同事,你自己, 都是属于公司构成和一部分,所以这个结构是不允许改变,没有员工的公司,那不叫公司。

工作结构图:

java五种常用设计模式(java设计模式桥接模式最详细讲解)(1)

员工:开发,测试,架构师,总监,经理,主管,Ui,测试,产品经理

工作:开发写代码,测试测试bug,架构师设计架构,总监摸摸鱼,经理项目管理,产品经理设计原型。

创作价值:员工——> 工作 互联网公司。

需要桥接起来就是公司的制度。所以核心就在工作,大家都不工作就没有了公司 。形成了一个桥接的结构,那么这个模式就是桥接设计模式。通俗易懂地来说某公司制度连接了员工和工作,给公司创造价值。

编码设计:

java五种常用设计模式(java设计模式桥接模式最详细讲解)(2)

抽象类:

package com.xy.design.bridge.abstracts; import com.xy.design.bridge.MakingTaskImplementorService; import com.xy.design.bridge.vo.WorkPlanVO; /** * <p> * * @author yang * @since 2022-09-24 */ public abstract class PersonnelAbstract { protected MakingTaskImplementorService makingTaskImplementorService; protected PersonnelAbstract(MakingTaskImplementorService makingTaskImplementorService) { this.makingTaskImplementorService = makingTaskImplementorService; } public abstract void business(WorkPlanVO workPlanVO); }

工作业务接口:

package com.xy.design.bridge; import com.xy.design.bridge.vo.WorkPlanVO; /** * <p> * * @author yang * @since 2022-09-24 */ public interface MakingTaskImplementorService { /** *工作业务方法 */ void businessWorkPlan(WorkPlanVO workPlanVO); } /** * <p> * * @author yang * @since 2022-09-24 */ public class DevelopmentImplBridge implements MakingTaskImplementorService { @Override public void businessWorkPlan(WorkPlanVO workPlanVO) { System.out.println("开发主要是做了什么:" workPlanVO.getWorkContent()); } } public class PmImplBridge implements MakingTaskImplementorService { @Override public void businessWorkPlan(WorkPlanVO workPlanVO) { System.out.println("Pm主要是做了什么:" workPlanVO.getWorkContent()); } } /** * <p> * * @author yang * @since 2022-09-24 */ public class UiDesignImplBridge implements MakingTaskImplementorService { @Override public void businessWorkPlan(WorkPlanVO workPlanVO) { System.out.println("ui主要是做了什么:" workPlanVO.getWorkContent()); } }

拓展实现:

package com.xy.design.bridge.abstracts.impl; import com.xy.design.bridge.MakingTaskImplementorService; import com.xy.design.bridge.abstracts.PersonnelAbstract; import com.xy.design.bridge.vo.WorkPlanVO; /** * <p> * * @author yang * @since 2022-09-24 */ public class Coding extends PersonnelAbstract { public Coding(MakingTaskImplementorService makingTaskImplementorService) { super(makingTaskImplementorService); } @Override public void business(WorkPlanVO workPlanVO) { this.makingTaskImplementorService.businessWorkPlan(workPlanVO); } } /** * <p> * * @author yang * @since 2022-09-24 */ public class UiDesign extends PersonnelAbstract { public UiDesign(MakingTaskImplementorService makingTaskImplementorService) { super(makingTaskImplementorService); } @Override public void business(WorkPlanVO workPlanVO) { this.makingTaskImplementorService.businessWorkPlan(workPlanVO); } }

测试:

package com.xy.design.bridge.test; import com.xy.design.bridge.MakingTaskImplementorService; import com.xy.design.bridge.abstracts.PersonnelAbstract; import com.xy.design.bridge.abstracts.impl.*; import com.xy.design.bridge.vo.WorkPlanVO; /** * <p> * * @author yang * @since 2022-09-24 */ public class Test { public static void main(String[] args) { WorkPlanVO dev = new WorkPlanVO("一包烟,一个参数传一天",8,1,"java开发"); PersonnelAbstract devAbs = new Coding(new DevelopmentImplBridge()); devAbs.business(dev); WorkPlanVO ui = new WorkPlanVO("抠图扣一天",8,1,"UI"); PersonnelAbstract uiAbs = new UiDesign(new UiDesignImplBridge()); uiAbs.business(ui); WorkPlanVO pm = new WorkPlanVO("pm 吹水一整天",8,1,"PM"); PersonnelAbstract pmAbs = new PmDemand(new PmImplBridge()); pmAbs.business(pm); } }

java五种常用设计模式(java设计模式桥接模式最详细讲解)(3)

如果你需要拓展业务只需要增加Bridge实现类,如果还有多个不同的员工,比如架构师,前端开发等直接加入拓展即可,抽象和实现分离,没有依赖关系。

实际业务场景:

1,我们数据库jdbc连接,不同的jdbc连接需要兼容项目,jdbcteamplate

2,okhttp 方式。

3,aop通知

java五种常用设计模式(java设计模式桥接模式最详细讲解)(4)

java五种常用设计模式(java设计模式桥接模式最详细讲解)(5)

这种方式其实没有完全使用桥接模式的方式。

我们再来看aop的源码

他里面就使用了桥接模式方式

java五种常用设计模式(java设计模式桥接模式最详细讲解)(6)

java五种常用设计模式(java设计模式桥接模式最详细讲解)(7)

java五种常用设计模式(java设计模式桥接模式最详细讲解)(8)

java五种常用设计模式(java设计模式桥接模式最详细讲解)(9)

java五种常用设计模式(java设计模式桥接模式最详细讲解)(10)

java五种常用设计模式(java设计模式桥接模式最详细讲解)(11)

当前里面还用到了适配器设计模式:

java五种常用设计模式(java设计模式桥接模式最详细讲解)(12)

当然我们使用的框架源码当中很多都使用了桥接设计模式,当然也有很多其他设计模式。感兴趣的同学可以自己去研究源码。

————没有与生俱来的天赋,都是后天的努力拼搏(我是小杨,谢谢你的关注和支持)

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页