惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tenable Blog
Last Week in AI
Last Week in AI
P
Proofpoint News Feed
Engineering at Meta
Engineering at Meta
H
Help Net Security
F
Fortinet All Blogs
MyScale Blog
MyScale Blog
宝玉的分享
宝玉的分享
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 司徒正美
量子位
N
Netflix TechBlog - Medium
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
Recorded Future
Recorded Future
博客园 - 三生石上(FineUI控件)
Vercel News
Vercel News
aimingoo的专栏
aimingoo的专栏
I
InfoQ
Microsoft Security Blog
Microsoft Security Blog
Scott Helme
Scott Helme
The Last Watchdog
The Last Watchdog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
IT之家
IT之家
AI
AI
WordPress大学
WordPress大学
Security Archives - TechRepublic
Security Archives - TechRepublic
Google Online Security Blog
Google Online Security Blog
U
Unit 42
V2EX - 技术
V2EX - 技术
MongoDB | Blog
MongoDB | Blog
Schneier on Security
Schneier on Security
博客园 - Franky
H
Heimdal Security Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Jina AI
Jina AI
W
WeLiveSecurity
P
Privacy & Cybersecurity Law Blog
Cloudbric
Cloudbric
B
Blog RSS Feed
N
News | PayPal Newsroom
S
Securelist
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
I
Intezer
Hacker News - Newest:
Hacker News - Newest: "LLM"
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
博客园_首页
罗磊的独立博客
H
Hackread – Cybersecurity News, Data Breaches, AI and More
雷峰网
雷峰网

博客园 - 心雨无痕

升级openssl和openssh linux配置LVM 杂七杂八 .net程序包含webbrowser插件时遇到的各种问题 mysql连接远程服务器很慢的解决方法 centos安装php需要注意的问题 centos配置nfs杂七杂八 iptables配置网络端口转发 适配器模式 单例模式 原型模式 工厂方法模式 简单工厂模式 建造者模式 ActionScript中Object和Dictionary的区别 FlashBuilder4.5破解方法 抽象工厂模式 设计模式浅见 了解下常见的开源协议
桥接模式
心雨无痕 · 2012-07-21 · via 博客园 - 心雨无痕

桥接模式用于将有多个维度变化的产品中的变化维度抽取出来单独处理,用GOF的定义是:将抽象部分与实现部分分离,使它们都可以独立的变化。

桥接模式概述

桥接模式的基本定义里面包括了四种角色(假设产品只具有2个维度的变化Fa和Fb):

1. 抽象产品类角色Abstraction,该类是产品的基类,它直接负责产品的架构定义和接口定义并定义维度变化方法Fa,它内部包含了一个接口类Implementor

2. 变化维度实现接口类Implementor,该接口是抽取的A中某种需要经常变化的维度或者说方法而产生的,它定义了变化的维度所需要实现的方法Fb

3. 具体产品类角色RefinedAbstraction,该类继承Abstraction,实现具体的产品构建Fa

4. 变化维度实现类ConcreteImplementor,该类实现接口Implementor,具体实现维度变化方法Fb

模式设计图如下

bridge

说白话点,其实就是在A和IB中各实现一个维度变化的方法,产品本身实现一个维度的变化,而将另外一个维度的变化抽象出一个接口,然后将该接口实现包含在产品类中来实现产品2个维度的解耦。

桥接模式的伪代码实现

以画图为例,画的图可能是圆形或者矩形,圆形和矩形的内部结构是不同的(举例为缩放resize),而且他们的绘制方法也是不同的(draw),因此就存在2个维度的变化(resize和draw),我们抽象圆形和矩形都是形状,绘制方法抽象为draw。

interface drawsth
{
  void drawme();
}
public class drawsth1 implements drawsth
{
  public void drawme()
  {
     //do draw
  }
}
public class drawsth2 implements drawsth
{
  public void drawme()
  {
    // do draw
  }
}
abstract class shape
{
  public void draw();
  publlic void resize();
}
class rect extends shape
{
  private drawsth _innerdraw;
  public rect(drawsth dd)
  {
    _innerdraw = dd;
  }
  public void draw()
  {
    _innerdraw.drawme();
  }
  public void resize()
  {
    // do resize things
  }
}
class circle extends shape
{
  private drawsth _innerdraw;
  public circle(drawsth dd)
  {
    _innerdraw = dd;
  }
  public void draw()
  {
    _innerdraw.drawme();
  }
  public void resize()
  {
    // do resize things
  }
}
class mybridge {
 public static void main(String[] args)
 {
   shape mshape1 = new rect(new drawsth1());
   shape mshape2 = new circle(new drawsth2());
 
   mshape1.draw(); mshape1.resize();
   mshape2.draw(); mshape2.resize();
 }
}