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