当前位置: 首页 > article >正文

六、桥接模式

桥接模式(Bridge Pattern)是一种结构型设计模式,旨在将抽象与实现分离,使得两者可以独立变化。通过使用桥接模式,可以避免在多个维度上进行继承,降低代码的复杂度,从而提高系统的可扩展性。

组成部分

  1. 抽象类(Abstraction): 定义高层的抽象接口,并持有对实现的引用。
  2. 扩展抽象类(RefinedAbstraction): 继承自抽象类,提供具体的扩展实现。
  3. 实现接口(Implementor): 定义实现部分的接口。
  4. 具体实现类(ConcreteImplementor): 实现实现接口的具体类。

JAVA: 

// 1、定义一个图像接口
public interface Graph {

    //画图方法 参数:半径 长 宽
    public void drawGraph(int radius, int x, int y);
}
// 红色图形
public class RedGraph implements Graph{

    @Override
    public void drawGraph(int radius, int x, int y) {
        System.out.println("红色");
    }
}
// 创建一个形状
public abstract class Shape {

    public Graph graph;

    public Shape(Graph graph){
        this.graph = graph;
    }

    public abstract void draw();
}
// 圆形
public class Circle extends Shape{
    private int radius;
    private int x;
    private int y;

    public Circle(int radius, int x, int y, Graph graph) {
        super(graph);
        this.radius = radius;
        this.x = x;
        this.y = y;
    }

    @Override
    public void draw() {
        System.out.println("圆形");
        graph.drawGraph(radius, x, y);
    }
}
@Test(description = "桥接模式")
    public void bridgePatternTest(){
        //创建圆形
        Shape shape = new Circle(10, 100, 100, new RedGraph());
        shape.draw();
    }

 GO:

package bridge

import "fmt"

// 桥接模式

// IMsgSender 消息发送接口
type IMsgSender interface {
	// Send 发送动作函数
	Send(msg string) error
}

// EmailMsgSender发送邮件
// 可能还有 电话、短信等各种实现
type IMsgReceiver struct {
	emails []string
}

func (I IMsgReceiver) Send(msg string) error {
	// 这里去发送消息
	fmt.Println(msg, "消息发送成功")
	return nil
}

func NewEmailMsgSender(emails []string) *IMsgReceiver {
	return &IMsgReceiver{emails: emails}
}

// INotification 通知接口
type INotification interface {
	// Notify 通报函数
	Notify(msg string) error
}

// ErrorNotification 错误通知
// 后面可能还有 warning 各种级别
type ErrorNotification struct {
	sender IMsgSender
}

// Notify 发送通知
func (e ErrorNotification) Notify(msg string) error {
	return e.sender.Send(msg)
}

func NewErrorNotification(sender IMsgSender) *ErrorNotification {
	return &ErrorNotification{sender: sender}
}
func TestBridge(t *testing.T) {
	sender := NewEmailMsgSender([]string{"test@test.com"})
	n := NewErrorNotification(sender)
	err := n.Notify("test msg")
	assert.Nil(t, err)
}


http://www.kler.cn/a/292165.html

相关文章:

  • Spring:bean的配置
  • 第9章 DIV+CSS布局作业
  • 基于麒麟服务器操作系统V10版本,部署Nginx服务、MySql服务搭建PHP环境,实现静态网站平台的搭建。
  • awk(常用)
  • 11.13机器学习_线性回归
  • 基于VUE实现语音通话:边录边转发送语言消息、 播放pcm 音频
  • 信息安全数学基础(1)整除的概念
  • 并行处理大 csv 文件
  • 腾讯云 安装部署 SSL 证书到负载均衡(CLB)指引
  • 微信小程序rpx和px关系
  • Java在智能数据挖掘系统的应用
  • 新能源汽车超级电容和电池能量管理系统的simulink建模与仿真
  • 解析C++内联函数与auto关键字
  • 【前端】中断请求的方式
  • 【WPS Excel】复制表格时,提示“图片太大,超过部份将被截去“ 问题
  • 基于Openjdk容器打包运行jar程序
  • BZOJ2959 长跑(LCT维护边双后缩点)
  • Rust 赋能前端:PDF 分页/关键词标注/转图片/抽取文本/抽取图片/翻转...
  • JVM系列(七) -对象的内存分配流程
  • 场外个股期权的风险有哪些方面?
  • 数据库课程设计mysql---图书管理系统详细的设计文档和需求文档
  • NTC阻值与温度计算公式
  • Redis 常用命令总结
  • 【Django-Minio-Storage 使用教程】
  • EXCEL表格如何实现数字自动加减乘数(简单有效)
  • 初识redis(String,Hash,List,Set,SortedSet)