Java描述设计模式(08):桥接模式
2019-08-26 06:25:52来源:博客园 阅读 ()
Java描述设计模式(08):桥接模式
一、桥接模式简介
1、基础描述
桥梁模式是对象的结构模式。又称为柄体(Handle and Body)模式或接口(Interface)模式。桥梁模式的用意是“将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化”。
2、场景问题描述
1)、场景分析
在一个复杂的系统中,消息通知是一个必备模块,一般封装方式主要从下面两个方式入手:
- 消息类型
用户端消息(user-client)
管理端消息(system-client)
- 消息接收
邮件发送(email)
短信发送(msg)
2)、场景图解
3)、源码实现
/**
* 桥接模式场景应用
*/
public class C01_InScene {
public static void main(String[] args) {
// 创建具体的实现对象
MsgImplementor implementor = new SendBySMS() ;
// 创建普通的消息对象
AbstractMsg abstractMessage = new UserMsg(implementor);
abstractMessage.sendMessage("您的账户异地登陆", "用户A0001");
// 切换为邮件方式且加急处理
implementor = new SendByEmail() ;
abstractMessage = new AdminMsg(implementor);
abstractMessage.sendMessage("项目上线通知", "运维S0001");
}
}
/**
* 封装消息类型
*/
abstract class AbstractMsg {
// 持有一个实现部分的对象
MsgImplementor impl ;
public AbstractMsg (MsgImplementor impl){
this.impl = impl ;
}
/**
* 发送消息,委派给实现部分的方法
* @param message 要发送消息的内容
* @param toUser 消息的接受者
*/
public void sendMessage (String message, String toUser){
this.impl.send(message, toUser);
}
}
class AdminMsg extends AbstractMsg{
public AdminMsg(MsgImplementor impl) {
super(impl);
}
@Override
public void sendMessage(String message, String toUser) {
message = "辛苦的管理员:"+message;
super.sendMessage(message, toUser);
}
}
class UserMsg extends AbstractMsg{
public UserMsg(MsgImplementor impl) {
super(impl);
}
@Override
public void sendMessage(String message, String toUser) {
message = "尊敬的用户:" + message ;
super.sendMessage(message, toUser);
}
}
/**
* 封装消息发送
*/
interface MsgImplementor {
void send (String message , String toUser) ;
}
class SendBySMS implements MsgImplementor{
@Override
public void send(String message, String toUser) {
System.out.println("短信通知:"+toUser+";内容:"+message);
}
}
class SendByEmail implements MsgImplementor{
@Override
public void send(String message, String toUser) {
System.out.println("邮件通知:"+toUser+";内容:"+message);
}
}
二、桥接模式
1、模式图解
2、核心角色
抽象化(Abstraction)角色
抽象化给出的定义,并保存一个对实现化对象的引用。
修正抽象化(RefinedAbstraction)角色
扩展抽象化角色,改变修正父类对抽象化的定义。
实现化(Implementor)角色
这个角色给出实现化角色的接口,但不给出具体的实现。
具体实现化(ConcreteImplementor)角色
这个角色给出实现化角色接口的具体实现。
3、源码封装
abstract class Abstraction {
private Implementor implementor ;
public Abstraction (Implementor implementor){
this.implementor = implementor ;
}
// 实例方法
public void operation (){
implementor.operationImpl();
}
}
class RefinedAbstraction extends Abstraction{
public RefinedAbstraction(Implementor implementor) {
super(implementor);
}
//其他的操作方法
public void otherOperation(){
}
}
abstract class Implementor {
// 示例方法,实现抽象部分需要的某些具体功能
public abstract void operationImpl () ;
}
class ConcreteImplementorA extends Implementor{
@Override
public void operationImpl() {
System.out.println("ConcreteImplementorA.operationImpl()");
}
}
class ConcreteImplementorB extends Implementor{
@Override
public void operationImpl() {
System.out.println("ConcreteImplementorB.operationImpl()");
}
}
三、Java应用场景
桥梁模式在Java应用中的一个非常典型的例子就是JDBC驱动器。抽象API可以对各种数据库引擎发出SQL指令,并不直接与数据库引擎互动,JDBC驱动器负责这个底层的工作。
JDBC的这种架构,把抽象部分和具体部分分离开来,从而使得抽象部分和具体部分都可以独立地扩展。
四、源代码地址
GitHub地址:知了一笑
https://github.com/cicadasmile/model-arithmetic-parent
码云地址:知了一笑
https://gitee.com/cicadasmile/model-arithmetic-parent
原文链接:https://www.cnblogs.com/cicada-smile/p/11397804.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:熔断监控Turbine
下一篇:json与String的转化
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash