![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
//
Bridge pattern -- Real World example
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
using
System;
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
using
System.Collections;
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
//
"Abstraction"
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
class
BusinessObject
![](https://i-blog.csdnimg.cn/blog_migrate/34031c708bfe702fe82d01ff5c6593aa.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
// Fields
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
private DataObject dataObject;
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
protected string group;
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](http://ctc.qzs.qq.com/ac/b.gif)
// Constructors
![](http://ctc.qzs.qq.com/ac/b.gif)
public BusinessObject( string group )
![](http://ctc.qzs.qq.com/ac/b.gif)
{
![](http://ctc.qzs.qq.com/ac/b.gif)
this.group = group;
![](http://ctc.qzs.qq.com/ac/b.gif)
}
![](http://ctc.qzs.qq.com/ac/b.gif)
![](http://ctc.qzs.qq.com/ac/b.gif)
// Properties
![](http://ctc.qzs.qq.com/ac/b.gif)
public DataObject DataObject
![](http://ctc.qzs.qq.com/ac/b.gif)
{
![](http://ctc.qzs.qq.com/ac/b.gif)
set{ dataObject = value; }
![](http://ctc.qzs.qq.com/ac/b.gif)
get{ return dataObject; }
![](http://ctc.qzs.qq.com/ac/b.gif)
}
![](http://ctc.qzs.qq.com/ac/b.gif)
![](http://ctc.qzs.qq.com/ac/b.gif)
// Methods
![](http://ctc.qzs.qq.com/ac/b.gif)
virtual public void Next()
![](http://ctc.qzs.qq.com/ac/b.gif)
{ dataObject.NextRecord(); }
![](http://ctc.qzs.qq.com/ac/b.gif)
![](http://ctc.qzs.qq.com/ac/b.gif)
virtual public void Prior()
![](http://ctc.qzs.qq.com/ac/b.gif)
{ dataObject.PriorRecord(); }
![](http://ctc.qzs.qq.com/ac/b.gif)
![](http://ctc.qzs.qq.com/ac/b.gif)
virtual public void New( string name )
![](http://ctc.qzs.qq.com/ac/b.gif)
{ dataObject.NewRecord( name ); }
![](http://ctc.qzs.qq.com/ac/b.gif)
![](http://ctc.qzs.qq.com/ac/b.gif)
virtual public void Delete( string name )
![](http://ctc.qzs.qq.com/ac/b.gif)
{ dataObject.DeleteRecord( name ); }
![](http://ctc.qzs.qq.com/ac/b.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
virtual public void Show()
![](http://ctc.qzs.qq.com/ac/b.gif)
{ dataObject.ShowRecord(); }
![](http://ctc.qzs.qq.com/ac/b.gif)
![](http://ctc.qzs.qq.com/ac/b.gif)
virtual public void ShowAll()
![](http://ctc.qzs.qq.com/ac/b.gif)
{
![](http://ctc.qzs.qq.com/ac/b.gif)
Console.WriteLine( "Customer Group: {0}", group );
![](http://ctc.qzs.qq.com/ac/b.gif)
dataObject.ShowAllRecords();
![](http://ctc.qzs.qq.com/ac/b.gif)
}
![](http://ctc.qzs.qq.com/ac/b.gif)
}
![](http://ctc.qzs.qq.com/ac/b.gif)
![](http://ctc.qzs.qq.com/ac/b.gif)
//
"RefinedAbstraction"
![](http://ctc.qzs.qq.com/ac/b.gif)
class
CustomersBusinessObject : BusinessObject
![](http://ctc.qzs.qq.com/ac/b.gif)
{
![](http://ctc.qzs.qq.com/ac/b.gif)
// Constructors
![](http://ctc.qzs.qq.com/ac/b.gif)
public CustomersBusinessObject( string group )
![](https://i-blog.csdnimg.cn/blog_migrate/3112b7b6526db5bc83e275260ae60525.gif)
: base( group ){}
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
// Methods
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
override public void ShowAll()
![](https://i-blog.csdnimg.cn/blog_migrate/3112b7b6526db5bc83e275260ae60525.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
// Add separator lines
![](http://ctc.qzs.qq.com/ac/b.gif)
Console.WriteLine();
![](http://ctc.qzs.qq.com/ac/b.gif)
Console.WriteLine( "------------------------" );
![](http://ctc.qzs.qq.com/ac/b.gif)
base.ShowAll();
![](http://ctc.qzs.qq.com/ac/b.gif)
Console.WriteLine( "------------------------" );
![](http://ctc.qzs.qq.com/ac/b.gif)
}
![](http://ctc.qzs.qq.com/ac/b.gif)
}
![](http://ctc.qzs.qq.com/ac/b.gif)
![](http://ctc.qzs.qq.com/ac/b.gif)
//
"Implementor"
![](http://ctc.qzs.qq.com/ac/b.gif)
abstract
class
DataObject
![](http://ctc.qzs.qq.com/ac/b.gif)
{
![](http://ctc.qzs.qq.com/ac/b.gif)
// Methods
![](http://ctc.qzs.qq.com/ac/b.gif)
abstract public void NextRecord();
![](http://ctc.qzs.qq.com/ac/b.gif)
abstract public void PriorRecord();
![](http://ctc.qzs.qq.com/ac/b.gif)
abstract public void NewRecord( string name );
![](http://ctc.qzs.qq.com/ac/b.gif)
abstract public void DeleteRecord( string name );
![](http://ctc.qzs.qq.com/ac/b.gif)
abstract public void ShowRecord();
![](http://ctc.qzs.qq.com/ac/b.gif)
abstract public void ShowAllRecords();
![](http://ctc.qzs.qq.com/ac/b.gif)
}
![](http://ctc.qzs.qq.com/ac/b.gif)
![](http://ctc.qzs.qq.com/ac/b.gif)
//
"ConcreteImplementor"
![](http://ctc.qzs.qq.com/ac/b.gif)
class
CustomersDataObject : DataObject
![](http://ctc.qzs.qq.com/ac/b.gif)
{
![](http://ctc.qzs.qq.com/ac/b.gif)
// Fields
![](http://ctc.qzs.qq.com/ac/b.gif)
private ArrayList customers = new ArrayList();
![](http://ctc.qzs.qq.com/ac/b.gif)
private int current = 0;
![](http://ctc.qzs.qq.com/ac/b.gif)
![](http://ctc.qzs.qq.com/ac/b.gif)
// Constructors
![](http://ctc.qzs.qq.com/ac/b.gif)
public CustomersDataObject()
![](http://ctc.qzs.qq.com/ac/b.gif)
{
![](http://ctc.qzs.qq.com/ac/b.gif)
// Loaded from a database
![](http://ctc.qzs.qq.com/ac/b.gif)
customers.Add( "Jim Jones" );
![](http://ctc.qzs.qq.com/ac/b.gif)
customers.Add( "Samual Jackson" );
![](http://ctc.qzs.qq.com/ac/b.gif)
customers.Add( "Allen Good" );
![](http://ctc.qzs.qq.com/ac/b.gif)
customers.Add( "Ann Stills" );
![](http://ctc.qzs.qq.com/ac/b.gif)
customers.Add( "Lisa Giolani" );
![](http://ctc.qzs.qq.com/ac/b.gif)
}
![](http://ctc.qzs.qq.com/ac/b.gif)
![](http://ctc.qzs.qq.com/ac/b.gif)
// Methods
![](http://ctc.qzs.qq.com/ac/b.gif)
public override void NextRecord()
![](http://ctc.qzs.qq.com/ac/b.gif)
{
![](http://ctc.qzs.qq.com/ac/b.gif)
if( current <= customers.Count - 1 )
![](http://ctc.qzs.qq.com/ac/b.gif)
current++;
![](http://ctc.qzs.qq.com/ac/b.gif)
}
![](http://ctc.qzs.qq.com/ac/b.gif)
![](http://ctc.qzs.qq.com/ac/b.gif)
public override void PriorRecord()
![](http://ctc.qzs.qq.com/ac/b.gif)
{
![](http://ctc.qzs.qq.com/ac/b.gif)
if( current > 0 )
![](http://ctc.qzs.qq.com/ac/b.gif)
current--;
![](http://ctc.qzs.qq.com/ac/b.gif)
}
![](http://ctc.qzs.qq.com/ac/b.gif)
![](http://ctc.qzs.qq.com/ac/b.gif)
public override void NewRecord( string name )
![](http://ctc.qzs.qq.com/ac/b.gif)
{
![](http://ctc.qzs.qq.com/ac/b.gif)
customers.Add( name );
![](http://ctc.qzs.qq.com/ac/b.gif)
}
![](http://ctc.qzs.qq.com/ac/b.gif)
![](http://ctc.qzs.qq.com/ac/b.gif)
public override void DeleteRecord( string name )
![](http://ctc.qzs.qq.com/ac/b.gif)
{
![](http://ctc.qzs.qq.com/ac/b.gif)
customers.Remove( name );
![](http://ctc.qzs.qq.com/ac/b.gif)
}
![](http://ctc.qzs.qq.com/ac/b.gif)
![](http://ctc.qzs.qq.com/ac/b.gif)
public override void ShowRecord()
![](http://ctc.qzs.qq.com/ac/b.gif)
{
![](http://ctc.qzs.qq.com/ac/b.gif)
Console.WriteLine( customers[ current ] );
![](http://ctc.qzs.qq.com/ac/b.gif)
}
![](http://ctc.qzs.qq.com/ac/b.gif)
![](http://ctc.qzs.qq.com/ac/b.gif)
public override void ShowAllRecords()
![](http://ctc.qzs.qq.com/ac/b.gif)
{
![](http://ctc.qzs.qq.com/ac/b.gif)
foreach( string name in customers )
![](http://ctc.qzs.qq.com/ac/b.gif)
Console.WriteLine( " " + name );
![](http://ctc.qzs.qq.com/ac/b.gif)
}
![](http://ctc.qzs.qq.com/ac/b.gif)
}
![](http://ctc.qzs.qq.com/ac/b.gif)
![](http://ctc.qzs.qq.com/ac/b.gif)
/// <summary>
![](http://ctc.qzs.qq.com/ac/b.gif)
/// Client test
![](http://ctc.qzs.qq.com/ac/b.gif)
/// </summary>
![](http://ctc.qzs.qq.com/ac/b.gif)
public
class
BusinessApp
![](http://ctc.qzs.qq.com/ac/b.gif)
{
![](http://ctc.qzs.qq.com/ac/b.gif)
public static void Main( string[] args )
![](http://ctc.qzs.qq.com/ac/b.gif)
{
![](http://ctc.qzs.qq.com/ac/b.gif)
// Create RefinedAbstraction
![](http://ctc.qzs.qq.com/ac/b.gif)
CustomersBusinessObject customers =
![](http://ctc.qzs.qq.com/ac/b.gif)
new CustomersBusinessObject(" Chicago ");
![](http://ctc.qzs.qq.com/ac/b.gif)
![](http://ctc.qzs.qq.com/ac/b.gif)
// Set ConcreteImplementor
![](http://ctc.qzs.qq.com/ac/b.gif)
customers.DataObject = new CustomersDataObject();
![](http://ctc.qzs.qq.com/ac/b.gif)
![](http://ctc.qzs.qq.com/ac/b.gif)
// Exercise the bridge
![](http://ctc.qzs.qq.com/ac/b.gif)
customers.Show();
![](http://ctc.qzs.qq.com/ac/b.gif)
customers.Next();
![](http://ctc.qzs.qq.com/ac/b.gif)
customers.Show();
![](http://ctc.qzs.qq.com/ac/b.gif)
customers.Next();
![](http://ctc.qzs.qq.com/ac/b.gif)
customers.Show();
![](http://ctc.qzs.qq.com/ac/b.gif)
customers.New( "Henry Velasquez" );
![](http://ctc.qzs.qq.com/ac/b.gif)
![](http://ctc.qzs.qq.com/ac/b.gif)
customers.ShowAll();
![](http://ctc.qzs.qq.com/ac/b.gif)
}
![](http://ctc.qzs.qq.com/ac/b.gif)
}