初学Java常用设计模式之——桥接模式和组合模式
2023-09-11 14:17:55 时间
声明:转载请附上原文链接
提示:标题序号从6开始,是照应不同设计模式笔记发布的顺序而定的,比如,第上一篇文章 初学Java常用设计模式之——适配器模式 序号从5开始。
6.桥接模式(了解)
6.1 桥接模式简介
- 桥接设计模式
- 适配器模式类似,包括以后经常会遇到意思接近⼀样的 设计模式,因为⼤神往往就是多个模式混⽤,且根据不 同的场景进⾏搭配,桥接设计模式也是结构型模式
- 将抽象部分与实现部分分离,使它们都可以独⽴的变化
- 通俗来说,是通过组合来桥接其它的⾏为/维度
- 应⽤场景
- 系统需要在构件的抽象化⻆⾊和具体化⻆⾊之间增加更 多的灵活性
- 不想使⽤继承导致系统类的个数急剧增加的系统
- 有时候⼀个类,可能会拥有多个变化维度,⽐如啤酒, 有不同的容量和品牌,可以使⽤继承组合的⽅式进⾏开 发,假如维度很多,就容易出现类的膨胀,使⽤桥接模 式就可以解决这个问题,且解耦
- 业务背景
我们需要构建⼀个⼿机类,我们知道⼿机有很多品牌,苹果、华
为等,从另外⼀个颜⾊维度,⼜有多种颜⾊,红、⻩、蓝等,
那如果描述这些类的话,传统⽅式就直接通过继承,就需要特别
多的类,品牌2,颜⾊3,就是6个类了,如果后续再增加品牌就
更多了,类数⽬将会激增,即所谓的类爆炸
使⽤桥接模式就可以解决这个问题,且灵活度⼤⼤提⾼
6.2 桥接设计模式案例
- 桥接模式优点
- 抽象和实现的分离
- 优秀的扩展能⼒,符合开闭原则
- 桥接模式缺点
- 增加系统的理解与设计难度
- 使⽤聚合关联关系建⽴在抽象层,要求开发者针对抽象 进⾏设计与编程,⽐如抽象类汽⻋,⾥⾯聚合了颜⾊ 类,有点像对象适配器
- 总结和对⽐
- 按GOF的说法,桥接模式和适配器模式⽤于设计的不同 阶段
- 桥接模式⽤于设计的前期,精细化的设计,让系统 更加灵活
- 适配器模式⽤于设计完成之后,发现类、接⼝之间 ⽆法⼀起⼯作,需要进⾏填坑
- 适配器模式经常⽤在第三⽅API协同⼯作的场合,在功能集成需求越来越多的今天,这种模式的使⽤频度越来 越⾼,包括有些同学听过 外观设计模式 ,这个也是某 些场景和适配器模式⼀样
- 按GOF的说法,桥接模式和适配器模式⽤于设计的不同 阶段
就以手机这个为例子直接上代码:
/**
* @Auther: csp1999
* @Date: 2020/11/09/21:07
* @Description: 抽象角色 手机
*/
public abstract class Phone {
/**
* 通过组合的方式来桥接其他行为(核心)
*/
protected Color color;
public void setColor(Color color) {
this.color = color;
}
/**
* 手机的方法
*/
abstract public void run();
}
/**
* @Auther: csp1999
* @Date: 2020/11/09/21:08
* @Description: 手机颜色接口
*/
public interface Color {
void useColor();
}
/**
* @Auther: csp1999
* @Date: 2020/11/09/21:38
* @Description:
*/
public class BlueColor implements Color {
@Override
public void useColor() {
System.out.println("蓝色...");
}
}
/**
* @Auther: csp1999
* @Date: 2020/11/09/21:12
* @Description:
*/
public class RedColor implements Color {
@Override
public void useColor() {
System.out.println("红色...");
}
}
/**
* @Auther: csp1999
* @Date: 2020/11/09/21:13
* @Description:
*/
public class YellowColor implements Color {
@Override
public void useColor() {
System.out.println("黄色...");
}
}
/**
* @Auther: csp1999
* @Date: 2020/11/09/21:39
* @Description:
*/
public class HWPhone extends Phone {
public HWPhone(Color color) {
super.setColor(color);
}
@Override
public void run() {
color.useColor();
System.out.println("华为手机...");
}
}
/**
* @Auther: csp1999
* @Date: 2020/11/09/21:40
* @Description: 手机的实例化
*/
public class ApplePhone extends Phone {
public ApplePhone(Color color) {
super.setColor(color);
}
@Override
public void run() {
color.useColor();
System.out.println("苹果手机...");
}
}
/**
* @Auther: csp1999
* @Date: 2020/11/09/21:40
* @Description:
*/
public class SXPhone extends Phone {
public SXPhone(Color color) {
super.setColor(color);
}
@Override
public void run() {
color.useColor();
System.out.println("三星手机...");
}
}
调用测试:
@Test
public void testBridge() {
HWPhone hwPhone = new HWPhone(new BlueColor());
hwPhone.run();
ApplePhone applePhone = new ApplePhone(new RedColor());
applePhone.run();
}
输出结果:
蓝色...
华为手机...
红色...
苹果手机...
7. 组合设计模式(了解)
7.1 组合设计模式简介
- 组合设计模式
- ⼜叫部分整体模式,将对象组合成树形结构以表示“部 分-整体”的层次结构,可以更好的实现管理操作
- 组合模式使得⽤户可以使⽤⼀致的⽅法操作单个对象和 组合对象
- 部分-整体对象的基本操作多数是⼀样的,但是应该还 会有不⼀样的地⽅
- 核⼼:组合模式可以使⽤⼀棵树来表示
- 应⽤场景
- 银⾏总⾏,总⾏有前台、后勤、⽹络部⻔等,辖区下还 有地⽅分⾏,也有前台、后勤、⽹络部⻔,最⼩的分⾏ 就没有⼦分⾏了
- 公司也是,总公司下有⼦公司,每个公司⼤部分的部⻔ 都类似
- ⽂件夹和⽂件,都有增加、删除等api,也有层级管理 关系
- 当想表达对象的部分-整体的层次结构
- 当我们的要处理的对象可以⽣成⼀颗树形结构,我们要 对树上的节点和叶⼦进⾏操作时,它能够提供⼀致的⽅ 式,⽽不⽤考虑它是节点还是叶⼦
- ⻆⾊
- 组合部件(Component):它是⼀个抽象接⼝,表示 树根,例⼦:总⾏
- 合成部件(Composite):和组合部件类似,也有⾃⼰ 的⼦节点,例⼦:总⾏下的分⾏
- 叶⼦(Leaf):在组合中表示⼦节点对象,注意是没有 ⼦节点,例⼦:最⼩地⽅的分⾏
组合设计模式实际上用的比较少,就不再花文章讲述,给大家推荐一篇文章自行了解:JAVA设计模式——组合模式
之后我会陆续更新其他设计模式博文,如果文章对您有帮助,希望点个赞/收藏/关注! O(∩_∩)O~
相关文章
- Java描述设计模式(17):调停者模式
- Java描述设计模式(08):桥接模式
- Java单例模式的不同写法(懒汉式、饿汉式、双检锁、静态内部类、枚举)
- java反射增加装饰模式的普适性
- 设计模式java——访问者模式
- 设计模式java——状态模式
- java设计模式---建造者模式
- 34 异常机制 异常体系结构 Java把异常当做对象来处理 并定义一个基类java.lang.Throwable作为所有异常的超类 Error Exception
- 【Java】java: 无法访问org.testng.annotations.Test
- 初学Java常用设计模式之——工厂模式
- 初学Java常用设计模式之——单例模式
- Java微信扫描支付模式二Demo ,整合官网直接运行版本
- Java 多线程下的单例模式
- Java设计模式之结构型:外观模式
- Java设计模式之行为型:策略模式
- Java设计模式之行为型:备忘录模式
- 深入Java设计模式之组合模式
- 深入Java设计模式之访问者模式
- 深入Java设计模式之适配器模式
- 深入Java设计模式之责任链模式
- Java 23种设计模式详尽分析与实例解析之一--创建型模式
- java设计模式案例详解:观察者模式
- 简单的JAVA MVC框架模式--Java-servlet-JavaBean
- JAVA设计模式之工厂模式