java五种常用设计模式(java设计模式桥接模式最详细讲解)
为什么要使用设计模式?说到底还是为了程序拓展和移植性,无法就是那几种设计思想
单一职责原则 , 开闭原则 里氏替换原则 ,依赖倒置原则,接口隔离原则,组合复用原则 迪米特法则这些思想和原则就是为了帮助我们更好规范地写出简洁,高效易拓展的程序,原理理解很抽象。
我们来谈谈桥接模式:
桥接模式属于结构性设计模式,所谓结构性就好比一个工程的图纸,你前期必须得设计好,且主体是不让修改的,所以结构是不允许变化的,至于你具体怎么施工,不同的工种根据结构图纸进行施工,总不能你基础打好了,你说你要改结构这不现实,所以结构理论是不允许修改,如果你非得修改那么就重建,代码也一样,重构。
应用设计场景:你是某个公司的员工,你有很多同事,但是同事都做着不同的工作和任务,但是老板每天需要关注你们的工作进度和情况,那么你和同事都是同属于一个公司,但是相同的事情都是需要上班工作,只是工作内容不同,都是在给公司创造价值;
工作任务,同事,你自己, 都是属于公司构成和一部分,所以这个结构是不允许改变,没有员工的公司,那不叫公司。
工作结构图:
员工:开发,测试,架构师,总监,经理,主管,Ui,测试,产品经理
工作:开发写代码,测试测试bug,架构师设计架构,总监摸摸鱼,经理项目管理,产品经理设计原型。
创作价值:员工——> 工作 互联网公司。
需要桥接起来就是公司的制度。所以核心就在工作,大家都不工作就没有了公司 。形成了一个桥接的结构,那么这个模式就是桥接设计模式。通俗易懂地来说某公司制度连接了员工和工作,给公司创造价值。
编码设计:
抽象类:
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);
}
}
如果你需要拓展业务只需要增加Bridge实现类,如果还有多个不同的员工,比如架构师,前端开发等直接加入拓展即可,抽象和实现分离,没有依赖关系。
实际业务场景:
1,我们数据库jdbc连接,不同的jdbc连接需要兼容项目,jdbcteamplate
2,okhttp 方式。
3,aop通知
这种方式其实没有完全使用桥接模式的方式。
我们再来看aop的源码
他里面就使用了桥接模式方式
当前里面还用到了适配器设计模式:
当然我们使用的框架源码当中很多都使用了桥接设计模式,当然也有很多其他设计模式。感兴趣的同学可以自己去研究源码。
————没有与生俱来的天赋,都是后天的努力拼搏(我是小杨,谢谢你的关注和支持)
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com