Java设计模式之桥梁模式(Bridge Pattern)

independently.(将抽象和实现解耦,使得两者可以独立地变化。)● Abstraction——抽象化角色

它的主要职责是定义出该角色的行为,同时保存一个对实现化角色的引用,该角色

一般是抽象类。

● Implementor——实现化角色

它是接口或者抽象类,定义角色必需的行为和属性。

● RefinedAbstraction——修正抽象化角色

它引用实现化角色对抽象化角色进行修正。

● ConcreteImplementor——具体实现化角色

它实现接口或抽象类定义的方法和属性。

使用场景

● 不希望或不适用使用继承的场景

● 接口或抽象类不稳定的场景

● 重用性要求较高的场景

注意:

发现类的继承有 N 层时,可以考虑使用桥梁模式。桥梁模式主要考虑如何拆分抽

象和实现。

设计原则

●Single Responsibility Principle:单一职责原则

单一职责原则有什么好处:

● 类的复杂性降低,实现什么职责都有清晰明确的定义;

● 可读性提高,复杂性降低,那当然可读性提高了;

● 可维护性提高,可读性提高,那当然更容易维护了;

●变更引起的风险降低,变更是必不可少的,如果接口的单一职责做得好,一个接

口修改只对相应的实现类有影响,对其他的接口无影响,这对系统的扩展性、维护

性都有非常大的帮助。

ps:接口一定要做到单一职责,类的设计尽量做到只有一个原因引起变化。

单一职责原则提出了一个编写程序的标准,用“职责”或“变化原因”来衡量接口

或类设计得是否优良,但是“职责”和“变化原因”都是不可度量的,因项目而异,因

环境而异。

● Liskov Substitution Principle:里氏替换原则

定义:Functions that use pointers or references to base classes must be able to

use objects of derived classes without knowing it.

(所有引用基类的地方必须能透明地使用其子类的对象。)

通俗点讲,只要父类能出现的地方子类就可以出现,而且替换为子类也不会产生任

何错误或异常,使用者可能根本就不需要知道是父类还是子类。但是,反过来就不

行了,有子类出现的地方,父类未必就能适应。

定义中包含的四层含义

1.子类必须完全实现父类的方法

2.子类可以有自己的个性

3.覆盖或实现父类的方法时输入参数可以被放大

如果父类的输入参数类型大于子类的输入参数类型,会出现父类存在的地

方,子类未必会存在,因为一旦把子类作为参数传入,调用者很可能进入子类的方

法范畴。

4. 覆写或实现父类的方法时输出结果可以被缩小

父类的一个方法的返回值是一个类型 T,子类的相同方法(重载或覆写)的返

回值为 S,那么里氏替换原则就要求 S 必须小于等于 T,也就是说,要么 S 和 T

是同一个类型,要么 S 是 T 的子类。

● Interface Segregation Principle:接口隔离原则

接口分为两种:

实例接口(Object Interface):Java 中的类也是一种接口

类接口(Class Interface): Java 中经常使用 Interface 关键字定义的接口

隔离:建立单一接口,不要建立臃肿庞大的接口;即接口要尽量细化,同时接口中

的方法要尽量少。

接口隔离原则与单一职责原则的不同:接口隔离原则与单一职责的审视角度是不相

同的,单一职责要求的是类和接口职责单一,注重的是职责,这是业务逻辑上的划

分,而接口隔离原则要求接口的方法尽量少。

● Dependence Inversion Principle:依赖倒置原则

原始定义:

①高层模块不应该依赖低层模块,两者都应该依赖其抽象;

②抽象不应该依赖细节(实现类);

③细节应该依赖抽象。

依赖倒置原则在 java 语言中的体现:

①模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是

1200页Java架构面试专题及答案

小编整理不易,对这份1200页Java架构面试专题及答案感兴趣劳烦帮忙转发/点赞

百度、字节、美团等大厂常见面试题

发生,实现类之间不发生直接的依赖关系,其依赖关系是

1200页Java架构面试专题及答案

小编整理不易,对这份1200页Java架构面试专题及答案感兴趣劳烦帮忙转发/点赞

[外链图片转存中…(img-r8XY0PG6-1714391707657)]

[外链图片转存中…(img-2M7XyVvK-1714391707658)]

百度、字节、美团等大厂常见面试题

[外链图片转存中…(img-8jgHnAo6-1714391707658)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值