Java设计模式之桥接模式的实现
作者:RYGAR 发布时间:2021-10-18 20:29:04
标签:Java,桥接模式
桥接模式
桥接模式是将抽象部分与它的实现部分分离,使他们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。
上图一个类被三个类继承,使我们的程序扩展性,可维护性低,违反了单一职责原则。
具体代码实现如下:
1.创建品牌接口
package com.jialidun.gof.birdge;
//品牌
public interface Brand {
void info();
}
2.创建计算机的抽象类
package com.jialidun.gof.birdge;
//抽象的电脑类型类
public abstract class Computer {
//组合,品牌 桥
protected Brand brand;
public Computer(Brand brand){
this.brand = brand;
}
public void info(){
brand.info();//自带品牌
}
}
3.苹果品牌
package com.jialidun.gof.birdge;
//苹果品牌
public class Apple implements Brand{
@Override
public void info() {
System.out.print("苹果"+"\n");
}
}
4.联想品牌
package com.jialidun.gof.birdge;
//联想品牌
public class Lenovo implements Brand{
@Override
public void info() {
System.out.print("联想"+"\n");
}
}
5.台式机
package com.jialidun.gof.birdge;
public class Desktop extends Computer{
public Desktop(Brand brand) {
super(brand);
System.out.print("台式机");
}
}
6.笔记本
package com.jialidun.gof.birdge;
public class laptop extends Computer{
public laptop(Brand brand) {
super(brand);
System.out.print("笔记本");
}
}
7.测试
package com.jialidun.gof.birdge;
public class Test {
public static void main(String[] args) {
//苹果笔记本
Computer computer = new laptop(new Apple());
computer.info();
//联想台式机
Desktop desktop = new Desktop(new Lenovo());
desktop.info();
}
}
好处分析:
1.桥接模式偶尔类似于多继承方案,但是多继承方案违背了类的单一职责原则, 复用性比较差,类的个数也非常多,桥接模式是比多继承方案更好的解决方法。极大的减少了子类的个数,从而降低管理和维护的成本
2.桥接模式提高了系统的可扩充性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统。符合开闭原则,就像一座桥,可以把两个变化的维度连接起来
劣势分析
1.桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。
2.桥接模式要求正确识别出系统中两个独立变化的维度,因此其使用范围具有一定的局限性。
来源:https://blog.csdn.net/m0_51067047/article/details/117571707


猜你喜欢
- 最近用淘宝客户端的时候,编辑地址的时候有个地区选择的功能。看上面的效果觉得挺酷,滚动的时候,是最后一个从下面飞上来挨着前一个。就自己鼓捣一个
- Java中Collections.sort()的使用在日常开发中,很多时候都需要对一些数据进行排序的操作。然而那些数据一般都是放在一个集合中
- 前言EasyCache升级兼容 Springboot2,有个业务系统启动总是会卡住,最后抛出超时异常,如下:java.util.concur
- Mybatis表现关联关系比hibernate简单,没有分那么细致one-to-many、many-to-one、one-to-one。而是
- 本文实例为大家分享了Java操作qq邮箱发送邮件的具体代码,供大家参考,具体内容如下今天尝试了使用QQ邮箱的POP3/IMAP/SMTP/E
- MyBatis介绍MyBatis本是apache的一个开源项目iBatis, 2010年这个项目由apache software
- 依赖配置结合前面的内容,这里我们要嵌入数据库的操作,这里以操作MySQL为例整合Mybatis,首先需要在原来的基础上添加以下依赖<!
- 简介本文介绍Idea如何根据maven依赖名查找它是哪个pom.xml引入的。有时候会有这样的问题:我们知道项目里用了某个依赖,想知道它是项
- 从Android 8.0开始系统为实现降低功耗,对后台应用获取用户位置信息频率进行了限制,每小时只允许更新几次位置信息,详细信息请参考官方说
- 本文实例为大家分享了java实现KFC点餐系统的具体代码,供大家参考,具体内容如下package KFC点餐系统;//food 类 publ
- 1、conditional注解介绍含义: 基于条件的注解作用: 根据是否满足某一个特定条件来决定是否创建某个特定的bean意义: Sprin
- 代码入下:import java.io.*; public class Practice { publ
- 1、使用步骤1)构建请求网址A、确定端点:每个GIS服务都有一个端点。例如,ArcGIS Server上Demographics文件夹下名为
- 一、BigInteger介绍如果在操作的时候一个整型数据已经超过了整数的最大类型长度 long 的话,则此数据就无法装入,所以,此时要使用
- 此处网上最多的做法是需要修改tomcat的参数配置大致如下:<Connector port="8080" prot
- 原因分析@Anysc注解会开启一个新的线程,主线程的Request和子线程是不共享的,所以获取为null在使用springboot的自定带的
- 现象: 1. 表面现象: 方法中输出的日志, 日志文件中找不到, 也没有任何报错(即@Async标注的方法没有执行, 也没有报错)2. 分析
- 和大家一起分享一下学习经验,如何实现Android文件下载进度显示功能,希望对广大初学者有帮助。先上效果图:上方的蓝色进度条,会根据文件下载
- ArrayList介绍ArrayList底层是基于数组实现的,是一个动态数组,自动扩容。ArrayList不是线程安全的,只能用在单线程环境
- 当我们在页面上进行selenium.type()或者selenium.click()操作的时候,往往需要需要等待一个元素的出现,对于一般的网