桥接模式-阿里云开发者社区

开发者社区> 开发与运维> 正文

桥接模式

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

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章