java设计模式_桥接模式

现在的手机,按照操作系统分,有ios,有android,还有window phone等。

如果是按软件来分的话,就有通讯录,游戏等。

按继承的思维来考虑的话,如下:

但是问题来了,如果是按照手机品牌来分的话,增加一个新的手机品牌的话,意味着不仅要增加手机品牌,还要增加改手机品牌的通讯录和游戏。

若按照手机软件来分的话,同样,增加一个新的软件的话,意味着不仅要增加新的软件,还要增加各个品牌手机对应的通讯录和游戏。

通过桥接模式的话,若增加软件,则只需要增加软件即可,若增加品牌,只需增加品牌即可。

/**
 * @Title: PhoneSoftware.java
 * @Package com.wangbiao.design.bridge
 * @Description: TODO 
 * @author wangbiao   
 * @date 2014-9-23 下午11:13:20 
 * @version V1.0
 */
package com.wangbiao.design.bridge;

/**
 * @Title: PhoneSoftware.java
 * @Package com.wangbiao.design.bridge
 * @Description: TODO 
 * @author wangbiao   
 * @date 2014-9-23 下午11:13:20 
 * @version V1.0
 */
public interface PhoneSoftware {
    
    public void operation();

}

class ContractList implements PhoneSoftware{

    @Override
    public void operation() {
    System.out.println("这是通讯录");        
    }
    
} 

class PhoneGame implements PhoneSoftware{

    @Override
    public void operation() {
    System.out.println("这是游戏");
        
    }
    
}

package com.wangbiao.design.bridge;

public abstract class Phone {
    
private PhoneSoftware phoneSoftware;

public Phone() {
    // TODO Auto-generated constructor stub
}

public void setPhoneSoftware(PhoneSoftware phoneSoftware) {
    this.phoneSoftware = phoneSoftware;
}

public abstract void display();

public void operation(){
    this.phoneSoftware.operation();
}

}

class ApplePhone extends Phone{

    @Override
    public void display() {
        System.out.println("这是iphone");
    }
    
}

class AndroidPhone extends Phone{

    @Override
    public void display() {
        System.out.println("这是android phone");
    }
    
}

/**
 * @Title: Client.java
 * @Package com.wangbiao.design.bridge
 * @Description: TODO 
 * @author wangbiao   
 * @date 2014-9-23 下午10:30:29 
 * @version V1.0
 */
package com.wangbiao.design.bridge;

/**
 * @Title: Client.java
 * @Package com.wangbiao.design.bridge
 * @Description: TODO 
 * @author wangbiao   
 * @date 2014-9-23 下午10:30:29 
 * @version V1.0
 */
public class Client {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        PhoneSoftware game = new PhoneGame();
        PhoneSoftware contracts = new ContractList();
        Phone phone = new ApplePhone();
        phone.setPhoneSoftware(game);
        phone.display();
        phone.operation();
        
        phone.setPhoneSoftware(contracts);
        phone.display();
        phone.operation();

        
    }

}
时间: 2024-10-08 17:55:35

java设计模式_桥接模式的相关文章

图解Java设计模式之桥接模式

图解Java设计模式之桥接模式 手机操作问题 传统方案解决手机操作问题 传统方案解决手机操作问题分析 桥接模式(Bridge)-基本介绍 桥接模式解决手机操作问题 桥接模式在JDBC中的源码解析 桥接模式的注意事项和细节 桥接模式其它应用场景 手机操作问题 现在对不同手机类型的不同品牌实现操作编程(比如 :开机.关机.上网.打电话等等),如图 : 传统方案解决手机操作问题 传统方法对应的类图 传统方案解决手机操作问题分析 1)扩展性问题(类爆炸),如果我们再增加手机的样式(旋转式),就需要增加各

大话设计模式_桥接模式(Java代码)

合成/聚合复用原则:尽量使用合成/聚合,尽量不要使用类继承. 桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立变化. 解释:即一个系统可以有多种分类实现,把没种分类独立出来,让他们可以独自变化,减少他们之间的耦合. 简单描述:1个Abstraction类,持有一个Implementor的引用,其方法中调用此Implementor引用的对应方法 大话设计模式中的截图: 代码例子: Abstraction类: 1 package com.longsheng.bridge; 2 3 publi

Java设计模式:桥接模式

问题提出 生活中有很多事物集合,设为A1,A2......Am ,而每个事物都有功能F1,F2....Fn. 例如邮局的发送业务.简单模拟有两类事物:信件和包裹,均有平邮和挂号邮寄功能.程序设计中如何来描述这些功能呢?或许一般会与下面代码相似. public class A1 { void F1(){} void F2(){} } public class A2 { void F1(){} void F2(){} } 很明显,若有m个事物,n个功能,按照这个方法,一共要写m个类,功能方法累积起来

java设计模式之桥接模式

桥接模式 桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化.这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦.这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类.这两种类型的类可被结构化改变而互不影响.我们通过下面的实例来演示桥接模式(Bridge Pattern)的用法.其中,可以使用相同的抽象类方法但是不同的桥接实现类,来画出不同颜色的圆. 桥接模式所涉及的角色有:抽象化(Abstraction)角色:抽象化给出的

Java设计模式应用——桥接模式

性能管理系统中,数据产生后需要经过采集,汇聚,入库三个流程,用户才能查询使用. 采集可以是snmp采集,也可以是ems采集:汇聚可以使storm汇聚,也可以是spark汇聚:入库可以是hdfs入库,也可以是mppdb入库. 针对不同场景,我们可以灵活选择不同的采集,汇聚,入库方式.这种一个功能需要多种服务支持,每种服务又有不同类型的实现,使用桥接模式再适合不过. (注:这里仅仅是桥接模式的例子,实际应用中,采集.汇聚.入库时异步执行的,他们之间通过消息通信) 桥接模式,顾名思义,就是把每种服务看

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

一.概述 将抽象部分与它的实现部分分离,使它们都可以独立地变化.它是一种对象结构型模式,又称为柄体(Handle and Body)模式. 二.适用场景 处理多维度变化. 业务场景:某功能为将数据库中的数据转换成多种文件格式,例如txt.xml.pdf等格式,同时需要支持多种不同类型的数据库的读取.便可使用桥接模式对其进行设计. 这里的维度有两个 分别为:不同的文件格式 和 不同的数据库类型.如下图: 三.UML类图 桥接模式通用结构图: 针对上面的业务场景-桥接模式-示例结构图: 四.参与者

08.设计模式_桥接模式

转自自  http://www.cnblogs.com/zhili/p/AdapterPattern.html 一.引言 这里以电视遥控器的一个例子来引出桥接模式解决的问题,首先,我们每个牌子的电视机都有一个遥控器,此时我们能想到的一个设计是--把遥控器做为一个抽象类,抽象类中提供遥控器的所有实现,其他具体电视品牌的遥控器都继承这个抽象类,具体设计类图如下: 这样的实现使得每部不同型号的电视都有自己遥控器实现,这样的设计对于电视机的改变可以很好地应对,只需要添加一个派生类就搞定了,但随着时间的推

java设计模式之-----桥接模式

一.概念定义 将抽象部分和实现部分分离,使他们都可以独立的变化.(这句话有点抽象啊..) 在软件系统中,某种类型由于自身逻辑,具有多个维度的变化,如何利用面向对象的技术来使得该类型沿着多方向变化,而又不增加复杂度,这就要引入“Bridge”桥接模式. 二.模式角色 Abstraction: 1.定义抽象接口: 2.拥有一个Impl类型对象引用. RefinedAbstraction 1.扩展Abstraction的接口定义: Implementor 1.Implementor是具体实现的接口,I

Java 设计模式_代理模式(2016-08-19)

概念: 代理模式是对象的结构模式.代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用. 就是一个人或者机构代表另一个人或者机构采取行动.在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 类图: 在代理模式中的角色: ● 抽象对象角色:声明了目标对象和代理对象的共同接口,这样一来在任何可以使用目标对象的地方都可以使用代理对象. ● 目标对象角色:定义了代理对象所代表的目标对象. ● 代理对象角色:代理对象内部含有目标对象的