设计模式实例学习-桥接模式

原创 2015年11月18日 22:06:23

设计模式实例学习-桥接模式

原创博客,转载请注明出处:
http://blog.csdn.net/u011035622/article/details/49913793


定义

概念定义

(行为模式)

    将抽象于实现解耦,使二者可以独立的变化。
    我的理解:所需要实现的对象不通过直接在场景类中操作它的行为(方法),为了将它的行为状态抽象分离,因而通过抽象化角色中保存有对实现对象角色的引用,将实现对象的行为(方法)放在这抽象化角色的方法中调用。(有点绕口。。)

角色职责

  • 抽象化角色
  • 具体抽象化角色

    内部保存对实现化角色的引用,负责控制实现化角色的行为和状态。
    
  • 实现化角色
  • 具体实现化角色

    实现化,顾名思义,被实现的对象,定义自身的方法属性。
    

实例分析

场景描述

    电台需要插播广告,不同广告的广告词和广告代言人都不一样,需要根据情况调整,另外不同电台对广告的播放上也可能有不同要求。

代码讲解及分析

  • 抽象化角色 TvBoss.java
public abstract class TvBoss {
    Advertisement mAdvertisement;

    public void setAdvertisement(Advertisement _advertisement){
        this.mAdvertisement = _advertisement;
    }

    public void reportAd(){
        mAdvertisement.AdWords();
        mAdvertisement.AdPerson();;
    }

}

  通过reportAd()方法来操作实现化角色的行为(方法)。

  • 具体抽象化角色

      YyTvBoss.java:YY电台公司老大

public class YyTvBoss extends TvBoss{

    @Override
    public void reportAd() {
        super.reportAd();
        System.out.println("YY公司,这里增添或修改对象的行为。");
    }
}
  • 实现化角色 Advertisement.java
public interface Advertisement {
    //广告词
    void AdWords();
    //广告时间
    void AdPerson();
}
  • 具体实现化角色

     MusicAd.java:音乐广告

public class MusicAd implements Advertisement{

    @Override
    public void AdWords() {
        System.out.println("播放音乐广告词。");
    }

    @Override
    public void AdPerson() {
        System.out.println("周杰伦代言");
    }

}

  ColaAd.java:可乐饮料广告

public class ColaAd implements Advertisement{

    @Override
    public void AdWords() {
        System.out.println("播放可乐广告词");
    }

    @Override
    public void AdPerson() {
        System.out.println("科比代言");

    }

}
  • 场景类:
package bridge;

public class Main {

    public static void main(String[] args) {
        TvBoss boss = new YyTvBoss();
        boss.setAdvertisement(new ColaAd());
        boss.reportAd();

        System.out.println("--------------------");

        boss.setAdvertisement(new MusicAd());
        boss.reportAd();
    }

}

输出:

播放可乐广告词
科比代言
YY公司,这里增添或修改对象的行为。
--------------------
播放音乐广告词。
周杰伦代言
YY公司,这里增添或修改对象的行为。

分析:

  由图中例子可以看出,通过桥接模式将Boss调用广告播放操作和广告本身分开。这样对于新进的广告,我们只需要增加一个广告类,调用者及操作行为都无需改变。


桥接模式优缺点

优点

  • 抽象与实现分离
  • 拓展方便,减少了继承(重复用抽象化角色修饰进行拓展)。
  • 实现化角色行为封装在抽象化角色中,客户无需了解细节。

缺点

  • 很明显的是,父类中有的方法,子类必须也要有。对于同一个具体抽象化角色引用的具体实现化角色,不同的具体实现化角色调用相同的方法,如果增加不同类型的实现化角色,则可能需要再继承一个抽象化角色来引用它。这样的情况多了就会导致产生很多的抽象化角色。当然这也是为了替代继承————这对应的说明了桥接模式是能够很好的将公共方法和公共属性抽取,封装。

应用场景

  1. 替代继承的需要(最明显的特点)
  2. 重用性比较高的场景
  3. 接口或抽象类不稳定的场景(根据业务需求判断)

设计模式(结构型)之桥接模式(Bridge Pattern)

桥接模式是一种很实用的结构型设计模式,如果软件系统中某个类存在多个独立变化的维度,通过该模式可以将这多个维度分离出来,使他们可以独立扩展,让系统更加符合“单一职责原则”。与多层继承方案不同,它将多个独...
  • yanbober
  • yanbober
  • 2015年04月29日 21:15
  • 3351

跟着实例学习设计模式(9)-桥接模式bridge(结构型)

桥接模式属于结构型设计模式。 设计意图:将抽象部分与实现部分分离,使它们都可以独立的变化。 一看到设计意图,大家可能有些发懵,我们看到的继承和接口不都是抽象和实现分离的吗?尤其是接口和抽象类都是这样的...
  • andy_gx
  • andy_gx
  • 2015年07月15日 00:13
  • 1844

大话设计模式—桥接模式

桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。主要解决:在有多种可能会变化的情况下,...
  • lmb55
  • lmb55
  • 2016年04月02日 15:27
  • 1499

JAVA设计模式(07):结构型-桥接模式(Bridge)

在正式介绍桥接模式之前,我先跟大家谈谈两种常见文具的区别,它们是毛笔和蜡笔。假如我们需要大中小3种型号的画笔,能够绘制12种不同的颜色,如果使用蜡笔,需要准备3×12 = 36支,但如果使用毛笔的...
  • taozi8023
  • taozi8023
  • 2016年05月17日 16:34
  • 4990

软件设计模式——桥接模式(Bridge)

定义与结构GOF 在《设计模式》中给桥接模式的定义为:将抽象部分与它的实现部分分离,使它们都可以独立地变化。这里的抽象部分和实现部分不是我们通常认为的父类与子类、接口与实现类的关系,而是组合关系。也就...
  • Jungle_hello
  • Jungle_hello
  • 2016年04月18日 09:57
  • 614

JAVA设计模式之 桥接模式【Bridge Pattern】

一、概述 将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式。二、适用场景 处理多维度变化。 ...
  • l416112167
  • l416112167
  • 2015年03月06日 17:43
  • 3072

设计模式——桥接模式(BridgeMode)

要想正确理解设计模式,首先必须明确它是为了解决什么问题而提出来的。 设计模式学习笔记 ——Shulin 转载请注明出处:http://blog.csdn.net/zhshulin ...
  • u012909091
  • u012909091
  • 2014年01月06日 22:54
  • 2097

Android设计模式应用-桥接模式

桥接模式就是把事物和其具体实现分开,使他们可以各自独立的变化。桥接的用意是:将抽象化与实现化解耦,使得二者可以独立变化 看看关系图: 实现代码: 先定义接口: public inter...
  • u014737138
  • u014737138
  • 2016年04月03日 21:18
  • 497

桥接模式和代理模式的区别

代理模式:在调用者和被调用者之间加一个间接层来控制对象间的访问,代理和被调用对象实现相同的接口,通过间接层可以做缓存,安全控制,预处理等等一系列操作,但是有一个点必须记住,就是代理类和被调用类要实现统...
  • see__you__again
  • see__you__again
  • 2016年07月22日 17:17
  • 1583

【C#设计模式-桥接模式】

一.桥接模式定义: 桥接模式即将抽象部分与实现部分脱耦,使它们可以独立变化。 二.桥接模式的实现: 我先引进一个生活中的例子,这里引用一个电视遥控器的例子,对于每一个牌子的遥控器,都有对于的遥控器...
  • heyangyi_19940703
  • heyangyi_19940703
  • 2016年04月29日 11:23
  • 1237
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式实例学习-桥接模式
举报原因:
原因补充:

(最多只允许输入30个字)