桥接模式

桥接的效果
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#设计模式中的桥接模式一例
桥椄模式主要的意图是"将抽象部分与它的实现部分分离,使它们都可独立的变化" 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值