`
wangchao_17915566
  • 浏览: 169524 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

了解桥模式

阅读更多

桥模式:将某个问题抽象的不同形式分别与该问题的具体实现部分相分离,使他们都可以独立变化,并能够动态结合。

      例如电视厂商海尔,长虹生产21寸,29寸电视机。从这里要将它们分离出来,就用到桥模式。电视机与电视机生产厂商挂桥,从而,分离出不同厂商的实现,与不同电视机型号的实现.

     下面看下uml

 

从上图可以看出,将实际抽象分离出来。

看下代码

创建电视机

public abstract class Television {
	//电视厂商
	protected TelevisionMaker televisionMaker;
	//收看电视
	abstract public void teleview(TelevisionMaker televisionMaker);
}

 

接下来创建生产厂商

public abstract class TelevisionMaker {
	abstract public void produce();
}

 

电视机的型号,即继承电视机类

public class Inch21 extends Television{
	
	public void teleview(TelevisionMaker televisionMaker) {
		System.out.println("21寸电视");
	}

}

 

public class Inch29 extends Television{
	
	public void teleview(TelevisionMaker televisionMaker) {
		System.out.println("29寸电视");
	}

}

 

下面是不同厂商,即继承生产厂商

 

public class ChangHong extends TelevisionMaker{

	public ChangHong(){
		System.out.println("长虹厂商");
	}
	
	public void produce() {
		System.out.println("长虹厂商");
	}
}

 

public class Haier extends TelevisionMaker{
	public Haier(){
		System.out.println("海尔厂商");
	}
	
	public void produce() {
		System.out.println("海尔厂商");
	}

}

 

这样就使用了桥模式,将原本繁杂的系统分离开来。如果根据需求变动,要增加电视机生产型号或者电视机生产厂商,只需要实现相对应的抽象类即可。

这样,我们也可以根据用户的需要,得到他所需要的电视机,如长虹厂商出厂的29寸电视机。

测试代码如下:

public class Client {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Inch29 i = new Inch29();
		i.teleview(new ChangHong());
	}
}

 结果:

       长虹厂商
       29寸电视

 

这便达到我们所需要的效果了。希望朋友指出错误与不到指出,谢谢

  • 大小: 13.2 KB
分享到:
评论
7 楼 repsihWDX 2008-12-23  

你也许记成了builde模式吧
引用
动机:一个复杂对象由各部分组成,由于需求变化,各部分急剧变化,但是各部分组成的算法相对稳定。
意图:将一个复杂的对象的构成与其表示相分离,使得同样的构造过程,可以创建不同的表示。



这是什么东西?builder?不会滴,builder是组装对象用的。和bridge不同

6 楼 bloodrate 2008-12-23  
桥模式能实现类似于多继承的咚咚阿
5 楼 yunhaifeiwu 2008-12-15  
fjlyxx 写道
把握不当也许就要变成适配器了

 
    23种模式,不是万能模式,每个都不是完美模式。在学23种模式,要学23种模式后面中深层的东西--------这是个人的观点。我在实际使用中,不是先想到用什么模式,再用该模式的实现。也就是说我不是为了模式而模式;在实践使用中我根本没有模式的概念了。前一阵子,看到各个模式的名称,居然没有印象了。(掌握各个模式的体含义的好处在于,方便沟通交流。在实际使用中,没有模式概含罢了)

    这个桥模式,说实在的,核心实现也就是适配器的实现方式----------对象注入。桥模式与适配器模式,仅仅是各个类由于具体的场景不同而含义不同罢了。在实践中,如何自然区分他们呢?把握设计模式的一个原则即可----------封装变化点。
    下面是来自李建忠讲师的讲义:
   
引用

    引:在实际中有“非常复杂的对象,它们由多个变化维度变化得到的”,如何以较小的代价适应这种变化的呢?这    里不变的是,它们的维度数。例:坦克游戏中,各坦克的型号在变,同时为了适应不同的平台(PC,手机等)。

   意图:将抽象部份与实现部份相分离,使他们都可以独离的变化。


    其中意图,可简单理解成定义。

    桥模式,是两个维度的变化(从GOF给出的UML类图中看)。 如果一个对象,在实际需求中,有两个维度的变化(如:产品的型号规格与生产厂家都在变),我们要封装化点。自然的,各个维度都接定义一个接口,然后再采用对象注入,让两个接口以弱耦合的方式连接起来 。

   如果,不掌握最深成的东西,我们无法得心应手的使用设计模式。举个例子:

   当一个对象,是按三维、四维、五维。。。。。进行变化,我们选用什么设计模式?

  每个维度都用接口与该接口的实现进行规范,用户使用时,尽可能使用接口进行操作,而仅仅是接口,程序是无法运行的,因此向要接口中注入对象。 
  在以上的场景中,我们用的是桥接模式?还是适配模式?  如果每个该对象除了有多个维度在变化,而各个维度中的功能也在不断变化,又怎么实现呢? 每个维度中,又有许多的其他对象组成,而这些对象也在变化怎么办?

  在这种复杂的变化中,这个整体又将用什么模式?能简单归成二十三种模式中的哪一种呢?


  至于适配器模式,从需求上看-----仅仅是让一个接口标准遵循另一接口标准。从实现上看,与桥模式大体相同,即
对象注入。不同在于,桥模式的,允许多个对象注入(引申一下:当非常复杂时,这些注入的对象管理就特重要了,这里用上一个被许多初学者认为没有用的东东-----数据结构。)。而GOF给出的实现中,仅注入了一个对象罢了。



  ==============================================
在这里,不是针对fjlyxx进行反驳。filyxx也说得在理。在这里,仅仅是借其话题,引入自已对设计模式的一些理解与观点。 在二十三种设计模式中,其后面深层次的东西,更应该研究学习。


  
4 楼 yunhaifeiwu 2008-12-15  
repsihWDX 写道
e..我怎么记得bridge模式的关键是产品是由元素组成的,把元素用接口表述。
这样就封装了底层实现,产品的元素拼装过程不需要再去重复修改。如果需要添加不同实现,则直接继承元素接口进行扩展。貌似这个例子不是这样的表述吧..我很久没看dp了。可能记错

所以用bridge的关键在于是否确知了上层不会轻易发生变化。。


你也许记成了builde模式吧
引用
动机:一个复杂对象由各部分组成,由于需求变化,各部分急剧变化,但是各部分组成的算法相对稳定。
意图:将一个复杂的对象的构成与其表示相分离,使得同样的构造过程,可以创建不同的表示。



3 楼 fjlyxx 2008-12-14  
把握不当也许就要变成适配器了
2 楼 xuyao 2008-12-03  
GOF说的是"将抽象部分与它的实现部分分离,使它们都可以独立地变化",各人理解都是不一样的。有些模式从某种意义上来说,很广泛。
1 楼 repsihWDX 2008-12-03  
e..我怎么记得bridge模式的关键是产品是由元素组成的,把元素用接口表述。
这样就封装了底层实现,产品的元素拼装过程不需要再去重复修改。如果需要添加不同实现,则直接继承元素接口进行扩展。貌似这个例子不是这样的表述吧..我很久没看dp了。可能记错

所以用bridge的关键在于是否确知了上层不会轻易发生变化。。

相关推荐

    JavaScript设计模式–桥梁模式引入操作实例分析

    JavaScript设计模式中的桥梁模式是一种结构型模式,它旨在将抽象部分与实现部分分离,使得它们可以独立地进行变化。...了解并熟练运用这种模式,能够帮助开发者编写更健壮、可维护的JavaScript代码。

    LEDE项目:可怜的人桥模式1

    《LEDE项目:可怜的人桥模式1》 在IT行业中,网络配置是一项至关重要的任务,特别是在家庭或小型企业网络环境中。本文主要探讨的是在没有硬件桥接功能的情况下,如何通过LEDE路由器实现一种称为“可怜的人桥模式”...

    关于石桥煤矿安全管理模式探讨

    通过对这些数据的分析,可以了解到石桥煤矿的生产能力和产出水平,以及在实施安全管理模式后,其生产和效益的具体变化情况。 最后,文章中还提到了关键词“安全管理”、“模式”、“讨论”,这表明文章不仅仅介绍了...

    软件设计模式经典案例讲解

    本篇文章将深入探讨几种经典的设计模式:模板方法模式、外观模式、代理模式、装饰器模式、桥模式、工厂方法模式以及组合模式。 首先,模板方法模式(Template Method Pattern)是行为设计模式的一种,它定义了操作...

    设计模式_行为模式

    它允许遍历集合对象,而无需了解底层数据结构。 5. 中介者模式(Mediator):中介者模式用一个中介对象来封装一系列的对象交互,使得这些对象不需要显式地相互引用,从而降低耦合度。在多对象协作的场景中,中介者...

    x86汇编语言:从实模式到保护模式.zip

    《x86汇编语言:从实模式到保护模式》这本书是深入了解计算机底层运作机制的宝贵资源,尤其对于想要学习操作系统原理的读者来说,更是必不可少的参考书籍。它详细介绍了x86架构下汇编语言的使用,以及从实模式到保护...

    深入浅出java设计模式(高清中文PDF)

    所涉及的设计模式包括工厂模式、单例模式、建造模式、原型模式、适配器模式、桥梁模式、组合模式、装饰模式、门面模式、享元模式、代理模式、责任链模式、命令模式、解释器模式、迭代器模式、调停者模式、备忘录模式...

    软件设计模式期末作业

    这样,客户端只需要知道具体工厂,而不必了解如何创建产品。例如,可以有一个`饮品工厂`,它根据输入参数决定创建哪一种具体的饮料,如咖啡或茶,而客户端只需调用工厂的`createDrink()`方法即可。 再者,适配器...

    设计模式与泡MM——设计模式入门教程

    ### 设计模式与泡MM——设计模式入门教程 #### 一、创建型模式 ##### 1、FACTORY(工厂模式) ...接下来,我们将继续探讨其他的设计模式,包括剩余的行为模式等,以便更全面地了解设计模式的应用。

    Java中23种设计模式详解

    Java 中 23 种设计模式详解 在软件设计中,设计模式是解决特定问题的通用解决方案。...了解 Java 中的 23 种设计模式可以帮助开发者更好地设计和实现软件系统,提高系统的可维护性、可扩展性和可重用性。

    设计模式个人整理设计模式个人整理

    在例子中,工厂模式被比喻为在麦当劳或肯德基点餐,顾客只需要告诉服务员想要什么,而无需了解食品是如何制作的。工厂模式的优点在于可扩展性,但缺点是如果需要添加新产品,可能需要修改工厂代码。 2. **建造者...

    [源代码] 《易学 设计模式》 随书源代码

    第13章 游刃有余:桥模式 (Bridge) 第14章 如法炮制:组合模式 (Composite) 第15章 源源不断:享元模式 (Flyweight) 第16章 按部就班:模板方法模式 (TemplateMethod) 第17章 风吹草动:观察者模式 (Observer) 第18...

    二十三种设计模式【PDF版】

    如果你还不了解设计模式是什么的话? 那就先看设计模式引言 ! 学习 GoF 设计模式的重要性 建筑和软件中模式之异同 A. 创建模式 设计模式之 Singleton(单态/单件) 阎宏博士讲解:单例(Singleton)模式 保证...

    VMware虚拟机三种网络模式详解

    桥接模式是将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信。在桥接的作用下,类似于把物理主机虚拟为一个交换机,所有桥接设置的虚拟机连接到这个交换机的一个接口上,物理主机也同样插在这个交换机当中,所以...

    设计模式试题

    结构模式有多种,如适配器模式、桥模式、组合模式等。这些模式可以帮助开发者更好地定义对象的结构,提高代码的可维护性和灵活性。 设计模式试题涵盖了软件设计模式的各种知识点,旨在帮助开发者更好地理解设计模式...

    C#设计模式.PDF

    - **定义**:一个对象应当对其他对象有尽可能少的了解。 - **目的**:降低类与类之间的耦合度,提高系统的健壮性和可维护性。 - **实现**:通过减少类之间的交互来实现。 ### 12. 简单工厂(Simple Factory)模式 ...

    MVC设计模式了解什么是mvc

    MVC(Model-View-Controller)设计模式是一种广泛应用在软件开发中的架构模式,尤其是在Web应用领域。它将应用程序分为三个主要组件:模型(Model)、视图(View)和控制器(Controller),以实现业务逻辑与用户界面...

    用PHP语言实现16个设计模式.zip

    在软件开发中,设计模式是解决常见问题的模板或最佳实践,它们被广泛应用于各种编程语言,包括PHP。...同时,了解设计模式也是提升专业技能的重要途径,有助于更好地理解和应用面向对象编程的原则。

    设计模式与现实生活,形象,生动

    无论是麦当劳还是肯德基,当你告诉服务员“我要四个鸡翅”时,你并不关心这些鸡翅是如何制作出来的,也不需要了解具体的制作流程。这就像工厂模式中,消费者只需要知道最终的产品是什么,而具体的实现细节则由工厂来...

Global site tag (gtag.js) - Google Analytics