zl程序教程

您现在的位置是:首页 >  后端

当前栏目

桥接模式

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

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


我学会了,桥接模式 桥接模式属于结构型模式,这个类型的设计模式总结出了 类、对象组合后的经典结构,将类、对象的结构和使用解耦了,花式的去借用对象。