桥接模式

1.桥接模式概念

在《Head First Design Patterns》文中是这么介绍桥接模式的,“不仅可以改变你的实现,也可以改变你的抽象”。这句话说得一头雾水,这里的实现和抽象指的是什么呢?下面会通过例子来解释。

2.桥接模式的作用

把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。

3.使用场景

实现系统可能有多个角度分类,每一种角度都可能变化。说实话,我不懂怎么总结,只能通过例子来说明。

4.优点和缺点

优点
1、抽象和实现的分离,不会互相影响。
2、对于具体的抽象类的修改,不会影响到客户。
缺点
增加系统的理解与设计难度。

5.例子解析

桥接模式例子解析类图

这是一个遥控器和TV的例子。遥控器控制TV,不同的遥控器控制不同的TV.
遥控器抽象类(这个类可以是抽象类或者是接口)

package com.lgy.test;

/**
 * @author LGY
 * 把抽象化与实现化解耦,使得二者可以独立变化。这句化还真不好理解。我自己理解是这样的就以遥控器和TV来解释。
 * 不同的遥控器控制不同的TV。这里遥控器和TV都有可能发生变化,为了实现解耦,最好就是能将她们分开,独立让他们变化。
 * 但是这里的抽象化和实现化指的是啥?就本例来说,抽象化指的是遥控器,实现化指的是TV.只要我们能够区分是谁控制谁就很好理解了
 * 这里很明显是遥控器控制TV.而且代码中也很明显,RemoteControl和TV的关系是RemoteControl Has-a TV的关系
 */
public abstract class RemoteControl {

    TV imprementor;
    
    public RemoteControl(TV imprementor) {
        this.imprementor = imprementor;
    }
    abstract void on();
    abstract void off();
    public void setChannel(int station)
    {
        imprementor.tuneChannel(station);
    }
}

遥控器具体实现类

package com.lgy.test;

public class ConcrateRemote extends RemoteControl{

    public ConcrateRemote(TV imprementor) {
        super(imprementor);
    }
    private int currentStation;
    
    @Override
    void on() {
        imprementor.on();
    }

    @Override
    void off() {
        imprementor.off();
    }

    public void setStation(int station) {
        this.currentStation = station;
    }
    
    public void nextChannel() {
        setStation(currentStation+1);
        setChannel(currentStation);
    }
    public void previousChannel() {
        setStation(currentStation-1);
        setChannel(currentStation);

    }
}

TV接口

package com.lgy.test;

public interface TV {

    void on();
    void off();
    void tuneChannel(int station);
}

TV具体类:RCA

package com.lgy.test;

public class RCA implements TV{

    @Override
    public void on() {
        System.out.println("RCA ON");
    }

    @Override
    public void off() {
        System.out.println("RCA OFF");
    }

    @Override
    public void tuneChannel(int station) {
        System.out.println("RCA current station "+station);
    }
}

TV具体类:Sony

package com.lgy.test;

public class Sony implements TV{

    @Override
    public void on() {
        System.out.println("Sony ON");
    }

    @Override
    public void off() {
        System.out.println("Sony OFF");
    }

    @Override
    public void tuneChannel(int station) {
        System.out.println("Sony current station "+station);
    }
}

客户端:

package com.lgy.test;

public class Client {

    public static void main(String[] args) {
        TV tv = new RCA();
        ConcrateRemote concrateRemote = new ConcrateRemote(tv);
        concrateRemote.on();
        concrateRemote.nextChannel();
        concrateRemote.nextChannel();
        concrateRemote.nextChannel();
        concrateRemote.nextChannel();
        concrateRemote.previousChannel();

        concrateRemote.off();
    }
}

6.总结

把抽象化与实现化解耦,使得二者可以独立变化。这句化还真不好理解。我自己理解是这样的,就以遥控器和TV来解释。不同的遥控器控制不同的TV。这里遥控器和TV都有可能发生变化,为了实现解耦,最好就是能将她们分开,独立让他们变化。但是这里的抽象化和实现化指的是啥?就本例来说,抽象化指的是遥控器,实现化指的是TV.只要我们能够区分是谁控制谁就很好理解了,这里很明显是遥控器控制TV.而且代码中也很明显,RemoteControl和TV的关系是RemoteControl Has-a TV的关系。

7.源码地址

http://download.csdn.net/download/lgywsdy/9981845

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • 1 场景问题# 1.1 发送提示消息## 考虑这样一个实际的业务功能:发送提示消息。基本上所有带业务流程处理的系统...
    七寸知架构阅读 4,954评论 5 63
  • 本文参考:http://www.oschina.net/question/1436074_140456 http:...
    端木轩阅读 3,599评论 0 5
  • 在正式介绍桥接模式之前,我先跟大家谈谈两种常见文具的区别,它们是毛笔和蜡笔。假如我们需要大中小3种型号的画笔,能够...
    justCode_阅读 1,762评论 0 7
  • 概念 桥梁模式是对象的结构模式。又称为柄体(Handle and Body)模式或接口(Interface)模式。...
    今晚打肉山阅读 309评论 0 1
  • 这次是第二次来成都,上次来成都还是2010年.两次来各有各的印象,可能和来的目的、住的地方、接触的人以及吃的食物有...
    瘦成闪电666阅读 162评论 0 0