桥接模式

桥接的效果
1桥椄模式可以保持客户端程序的接口不变,而允许读者修改显示类或要使用的类.这可以防止重新编译一系列复杂的用户接口模块,而只需要重新编译Bridge各实际的最终显示类
2.可以分别扩展实现类和Bridage类,二者之间通常不会有相互作用
3.对客户端很容易隐藏实现细节

 

public interface Bridger {
    void addData(ArrayList col);
}

public interface VisList{
    //add a line to the display
    void addLine(Product p);
    //remove a line from the display
    void removeLine(int num);
}
public class ListBridge : Bridger {
    private VisList vis;
    //------
    public ListBridge(VisList v){
        vis = v;
    }
    //-----
    public void addData(ArrayList ar) {
        for(int i=0; i< ar.Count ; i++) {
            Product p = (Product)ar[i];
            vis.addLine (p);
        }
    }
}
public class ProductList : VisList{
    private ListBox list;
    //-----
    public ProductList(ListBox lst) {
        list = lst;
    }
    //-----
    public void addLine(Product p) {
        list.Items.Add (p.getName() );
    }
    //-----
    public void removeLine(int num) {
        if(num >=0 && num < list.Items.Count ){
            list.Items.Remove (num);
        }
    }
}
public class GridList:VisList     {
    private DataGrid grid;
    private DataTable dtable;
    private GridAdapter gAdapter;
    //-----
    public GridList(DataGrid grd) {
        grid = grd;
        dtable = new DataTable("Products");
        DataColumn column = new DataColumn("ProdName");
        dtable.Columns.Add(column);
        column = new DataColumn("Qty");
        dtable.Columns.Add(column);
        grid.DataSource = dtable;
        gAdapter = new GridAdapter (grid);
    }
    //-----
    public void addLine(Product p) {
        gAdapter.Add (p);
    }
    //-----
    public void removeLine(int num) {

    }
}

public class Invoke
{
    private void init()
    {
        products = new ArrayList ();
        readFile(products);    //read in the data file
        //create the product list
        prodList = new ProductList (lsProd);
        //Bridge to product VisList
        Bridger lbr = new ListBridge (prodList);
        //put the data into the product list
        lbr.addData (products);
        //create the grid VisList
        gridList = new GridList(grdProd);
        //Bridge to the grid list
        Bridger gbr = new ListBridge (gridList);
        //put the data into the grid display
        gbr.addData (products);
    }
}

//-------------------------------
//可排序的桥
public class SortBridge:ListBridge     {
//-----
public SortBridge(VisList v):base(v){
}
//-----
public override void addData(ArrayList ar) {
    int max = ar.Count ;
    Product[] prod = new Product[max];
    for(int i=0; i< max ; i++) {
        prod[i] = (Product)ar[i];
    }
    for(int i=0; i < max ; i++) {
        for (int j=i; j < max; j++) {
            if(prod[i].CompareTo (prod[j])>0)  {
                Product pt = prod[i];
                prod[i]= prod[j];
                prod[j] = pt;
            }
        }
    }
    for(int i = 0; i< max; i++) {
        vis.addLine (prod[i]);
    }
}
}

摘抄中文版的C#设计模式中的桥接模式一例
桥椄模式主要的意图是"将抽象部分与它的实现部分分离,使它们都可独立的变化" 

时间: 2024-07-31 13:17:07

桥接模式的相关文章

php设计模式 Bridge (桥接模式)

复制代码 代码如下: <?php /** * 桥接模式 * * 将抽象部份与它实现部分分离,使用它们都可以有独立的变化 */ abstract class Implementor { abstract public function operation(); } class ConcreteImplementorA extends Implementor { public function operation() { echo "ConcreteImplementorA Operation

.NET下的设计模式研究之桥接模式

设计 概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种"多维度的变化"?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式. 意图 将抽象部分与实现部分分离,使它们都可以独立的变化.[GOF <设计模式>] 结构图 图1 Bridge模式结构图 生活中的例子 桥接模式将抽象部分与它的实现分离,使它们能够独立地变化.一个普通的开关控制的电灯.电风扇等等,都是桥接的例子.开

java中的桥接模式

桥接模式的英文是 Bridge ,桥接模式关注抽象的设计.抽象是指包含了一组抽象方法的类,这些抽象方 法可能包含多个实现. 实现抽象的一般做法是创建类的层次结构,该层次结构的顶部是一个包含抽象 方法的抽象类,该类的每一个子类都提供这些抽象方法的不同实现.但是,当需要对该层次进行子类化时,这 一做法就存在不足了. 你可以创建一个桥,然后把这些抽象方法移到接口中,这样,抽象就依赖于接 口的实现. 桥接模式的意图是:将抽象与抽象方法的实现相互分离来实现解耦,以便二者可以相互独 立的变化. 上面这段话的

.net设计模式实例之桥接模式( Bridge Pattern)

一.桥接模式简介(Brief Introduction) 桥接模式(Bridge Pattern),将抽象部分与它的实现部分分离,使的抽象和实现都可以独立地变化. Decouple an abstraction from its implementation so that the two can vary independently.. 什么是聚合/组合: 聚合(Aggregation),当对象A被加入到对象B中,成为对象B的组成部分时,对象B和对象A之间为聚合关系.聚合是关联关系的一种,是较

.NET设计模式(9):桥接模式(Bridge Pattern)

概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种"多维度的变化"?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式. 意图 将抽象部分与实现部分分离,使它们都可以独立的变化.[GOF <设计模式>] 结构图 图1 Bridge模式结构图 生活中的例子 桥接模式将抽象部分与它的实现分离,使它们能够独立地变化.一个普通的开关控制的电灯.电风扇等等,都是桥接的例子.开关的目

TP-Link TL-WDR6300 5G无线WDS桥接模式怎么设置

  设置TP-Link TL-WDR6300 5G无线WDS桥接模式步骤一.查看主路由器信息 请进入主路由器(已经连接到Internet的那台路由器)的设置界面,查看主路由器的无线信号名称(SSID ).加密方式.无线密码.信道这几个参数,并记录下来,如下图所示.SSID.zhangsan_5G;无线加密方式.WPA-PSK/WPA2-PSK;无线密码.1a2b3c4d;无线信道.157 设置TP-Link TL-WDR6300 5G无线WDS桥接模式步骤二.TL-WDR6300路由器WDS桥接

ADSL桥接模式与路由器模式的区别

早期国内的ADSL线路接入都是桥接方式,由ADSL MODEM和电脑配合,在电脑上分配固定IP地址,开机就能接入局端设备进入互联网.但是这样在用户不开机上网时,IP是不会被利用,会造成目前日益缺少 的公网IP资源的浪费,因此出现了PPPoE拨号的ADSL接入. PPPoE拨号可以使用户开机时拨号接入局端设备,由局端设备 分配给一个动态公网IP,这样公网IP紧张的局面就得到了缓解.目前国内的ADSL上网方式中,基本上是PPPoE拨号的方式.PPPoE拨号出现以 后,ADSL的接入设备--ADSL

《Python编程实战:运用设计模式、并发和程序库创建高质量程序》—— 2.2 桥接模式

2.2 桥接模式 "桥接模式"(Bridge Pattern)用于将"抽象"(abstraction,比如接口或算法)与实现方式相分离. 如果不用桥接模式,那么通常的写法是,创建若干个基类,用于表示各种抽象方式,然后从每个基类中继承出两个或多个子类,用于表示对这种抽象方式的不同实现办法.用了桥接模式之后,我们需要创建两套独立的"类体系"(class hierarchy):"抽象体系"定义了我们所要执行的操作(比如接口或高层算法

经典设计模式——桥接模式

    桥接模式是一种结构型模式,它主要应对的是:由于实际的需要,某个类具有两个或以上维度的变化,如果只是使用继承,将无法实现这种需要,或者是的设计变得更加臃肿.     举例来说,假设现在我们需要为某个餐厅制造菜单,餐厅供应牛肉面.猪肉面--,而且顾客可以根据自己的口味选择是否添加辣椒.此时就产生了一个问题,我们如何来应对这种变化(这已经是两个维度的变化了,一个维度是面里面加的什么肉,另一个维度是加不加辣椒)?我们是否需要定义辣椒牛肉面.无辣牛肉面.辣椒猪肉面.无辣猪肉面4(2^2)个子类?如

java设计模式-桥接模式(屌丝男学设计模式)

本文介绍设计模式中的桥接(Bridge)模式的概念,用法,以及实际应用中怎么样使用桥接模式进行开发. Bridge模式的概念 Bridge 模式是构造型的设计模式之一.Bridge模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任.它的主要特点是把抽象(abstraction)与行为实现(implementation)分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展. Bridge模式的应用场景 面向对象的程序设计(OOP)里有类继承(子类继承父类)的