桥接模式(Bridge)
来源:互联网 发布:2016淘宝手机店铺装修 编辑:程序博客网 时间:2024/05/16 14:47
1. 定义
将抽象部分与它的实现部分分离,使它们都可以独立变化。2. UML 类图
3. 结构代码
using System;
namespace DoFactory.GangOfFour.Bridge.Structural
{
///<summary>
/// MainApp startup class for Structural
/// Bridge Design Pattern.
///</summary>
classMainApp
{
///<summary>
/// Entry point into console application.
///</summary>
staticvoid Main()
{
Abstraction ab =new RefinedAbstraction();
// Set implementation and call
ab.Implementor = new ConcreteImplementorA();
ab.Operation();
// Change implemention and call
ab.Implementor = new ConcreteImplementorB();
ab.Operation();
// Wait for user
Console.ReadKey();
}
}
///<summary>
/// The 'Abstraction' class
///</summary>
classAbstraction
{
protectedImplementor implementor;
// Property
publicImplementor Implementor
{
set { implementor =value; }
}
publicvirtual void Operation()
{
implementor.Operation();
}
}
///<summary>
/// The 'Implementor' abstract class
///</summary>
abstractclass Implementor
{
publicabstract void Operation();
}
///<summary>
/// The 'RefinedAbstraction' class
///</summary>
classRefinedAbstraction : Abstraction
{
publicoverride void Operation()
{
implementor.Operation();
}
}
///<summary>
/// The 'ConcreteImplementorA' class
///</summary>
classConcreteImplementorA : Implementor
{
publicoverride void Operation()
{
Console.WriteLine("ConcreteImplementorA Operation");
}
}
///<summary>
/// The 'ConcreteImplementorB' class
///</summary>
classConcreteImplementorB : Implementor
{
publicoverride void Operation()
{
Console.WriteLine("ConcreteImplementorB Operation");
}
}
}
Output
ConcreteImplementorB Operation
4. 实例代码
using System;
using System.Collections.Generic;
namespace DoFactory.GangOfFour.Bridge.RealWorld
{
///<summary>
/// MainApp startup class for Real-World
/// Bridge Design Pattern.
///</summary>
classMainApp
{
///<summary>
/// Entry point into console application.
///</summary>
staticvoid Main()
{
// Create RefinedAbstraction
Customers customers =new Customers("Chicago");
// Set ConcreteImplementor
customers.Data = new CustomersData();
// Exercise the bridge
customers.Show();
customers.Next();
customers.Show();
customers.Next();
customers.Show();
customers.Add("Henry Velasquez");
customers.ShowAll();
// Wait for user
Console.ReadKey();
}
}
///<summary>
/// The 'Abstraction' class
///</summary>
classCustomersBase
{
privateDataObject _dataObject;
protectedstring group;
public CustomersBase(string group)
{
this.group = group;
}
// Property
publicDataObject Data
{
set { _dataObject =value; }
get {return _dataObject; }
}
publicvirtual void Next()
{
_dataObject.NextRecord();
}
publicvirtual void Prior()
{
_dataObject.PriorRecord();
}
publicvirtual void Add(string customer)
{
_dataObject.AddRecord(customer);
}
publicvirtual void Delete(string customer)
{
_dataObject.DeleteRecord(customer);
}
publicvirtual void Show()
{
_dataObject.ShowRecord();
}
publicvirtual void ShowAll()
{
Console.WriteLine("Customer Group: " + group);
_dataObject.ShowAllRecords();
}
}
///<summary>
/// The 'RefinedAbstraction' class
///</summary>
classCustomers : CustomersBase
{
// Constructor
public Customers(string group)
: base(group)
{
}
publicoverride void ShowAll()
{
// Add separator lines
Console.WriteLine();
Console.WriteLine("------------------------");
base.ShowAll();
Console.WriteLine("------------------------");
}
}
///<summary>
/// The 'Implementor' abstract class
///</summary>
abstractclass DataObject
{
publicabstract void NextRecord();
publicabstract void PriorRecord();
publicabstract void AddRecord(string name);
publicabstract void DeleteRecord(string name);
publicabstract void ShowRecord();
publicabstract void ShowAllRecords();
}
///<summary>
/// The 'ConcreteImplementor' class
///</summary>
classCustomersData : DataObject
{
privateList<string> _customers =new List<string>();
privateint _current = 0;
public CustomersData()
{
// Loaded from a database
_customers.Add("Jim Jones");
_customers.Add("Samual Jackson");
_customers.Add("Allen Good");
_customers.Add("Ann Stills");
_customers.Add("Lisa Giolani");
}
publicoverride void NextRecord()
{
if (_current <= _customers.Count - 1)
{
_current++;
}
}
publicoverride void PriorRecord()
{
if (_current > 0)
{
_current--;
}
}
publicoverride void AddRecord(string customer)
{
_customers.Add(customer);
}
publicoverride void DeleteRecord(string customer)
{
_customers.Remove(customer);
}
publicoverride void ShowRecord()
{
Console.WriteLine(_customers[_current]);
}
publicoverride void ShowAllRecords()
{
foreach (string customerin _customers)
{
Console.WriteLine(" " + customer);
}
}
}
}
Output
Samual Jackson
Allen Good
------------------------
Customer Group: Chicago
Jim Jones
Samual Jackson
Allen Good
Ann Stills
Lisa Giolani
Henry Velasquez
------------------------
该文章来自:http://www.dofactory.com/Patterns/PatternBridge.aspx
- 桥接模式(Bridge)
- 桥接模式(Bridge)
- Bridge(桥接模式)
- 桥接模式(Bridge)
- 桥接模式(Bridge)
- 桥接模式(Bridge)
- 桥接模式(Bridge)
- 桥接模式(Bridge)
- Bridge(桥接模式)
- 桥接模式(Bridge)
- 桥接模式(Bridge)
- 桥接模式(Bridge)
- 桥接模式(Bridge)
- 桥接模式(Bridge)
- 桥接模式(Bridge)
- 桥接模式(Bridge)
- 桥接模式(Bridge)
- 桥接模式(Bridge)
- 最透彻的关于“随机数种子”和“伪随机数”的产生原理
- poj 1256 Anagram
- HDU 1983 - Kaitou Kid - The Phantom Thief (2)
- USCAO section 1.4 Number Triangles(DP)
- POJ 1988 Cube Stacking
- 桥接模式(Bridge)
- HA中虚IP自动切换的原理
- 【转】背包问题总结(0-1背包+完全背包+多重背包)
- diff 、patch 和 quilt (2)
- EMC Written Exam for Software Engineer Applicants 程序员招聘面试试题思路详解
- FileZilla如何支持中文
- SecureCRT中文乱码解决方案(http://www.bootf.com/547.html)-开始学习使用linux
- 11gr2 Rac 升级 11.2.0.1 ---> 11.2.0.3
- android学习之绘图和触摸事件结合的小例子