net设计模式实例之桥接模式( bridge pattern)

上传人:第*** 文档编号:31080100 上传时间:2018-02-04 格式:DOCX 页数:11 大小:236.15KB
返回 下载 相关 举报
net设计模式实例之桥接模式( bridge pattern)_第1页
第1页 / 共11页
net设计模式实例之桥接模式( bridge pattern)_第2页
第2页 / 共11页
net设计模式实例之桥接模式( bridge pattern)_第3页
第3页 / 共11页
net设计模式实例之桥接模式( bridge pattern)_第4页
第4页 / 共11页
net设计模式实例之桥接模式( bridge pattern)_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《net设计模式实例之桥接模式( bridge pattern)》由会员分享,可在线阅读,更多相关《net设计模式实例之桥接模式( bridge pattern)(11页珍藏版)》请在金锄头文库上搜索。

1、Net 设计模式实例之桥接模式( Bridge Pattern) 一、桥接模式简介(Brief Introduction)桥接模式(Bridge Pattern) ,将抽象部分与它的实现部分分离,使的抽象和实现都可以独立地变化。Decouple an abstraction from its implementation so that the two can vary independently.。什么是聚合/组合:聚合(Aggregation),当对象 A 被加入到对象 B 中,成为对象 B 的组成部分时,对象B 和对象 A 之间为聚合关系。聚合是关联关系的一种,是较强的关联关系,强调的是

2、整体与部分之间的关系。场景:商品和他的规格、样式就是聚合关系。类与类的聚合关系图组合(Composite) ,对象 A 包含对象 B,对象 B 离开对象 A 没有实际意义。是一种更强的关联关系。人包含手,手离开人的躯体就失去了它应有的作用。场景: Window 窗体由滑动条 slider、头部 Header 和工作区 Panel 组合而成。类与类的组合关系图聚合与合成原则:尽量使用聚合或者组合,尽量不使用类继承。对象的继承关系是在编译时就定义好的,所以无法在运行时改变从父类继承的实现 。子类的实现与它的父类有着非常紧密的依赖关系,以至于父类实现中的任何变化必然会导致子类发生变化。当需要复用子类

3、时,如果集成下来的实现不符合解决新的问题,则父类必然重写或被其他更合适的类替换。这种依赖关系限制了灵活性并最终限制了复用性。二、解决的问题(What To Solve)当系统有多维角度分类时,而每一种分类又有可能变化,这时考虑使用桥接模式比较合适。三、桥接模式分析(Analysis)1、桥接模式结构Abstraction 类:业务抽象类,定义一个抽象接口,维护对 Impementor 的引用.RefinedAbstraction 类:具体实现类,被提炼的抽象Implementor 类:定义一个抽象实现类,此抽象类与 Abstraction 类不一定完全相同。Implementor 类提供了一些

4、原始的操作,而 Abstraction 类是对这些原始操作一个更高层次的封装.ConcreteImplementorA,ConcreteImplementorA 类:具体实现2、代码1、业务抽象类 Abstraction 及其提炼出的具体实现类 RefinedAbstractionpublic abstract class Abstractionprotected Implementor _implementor; public Implementor Implementorset _implementor = value; get return _implementor; public vi

5、rtual void Operation()_implementor.OperationImp();public class RefinedAbstraction:Abstractionpublic override void Operation()_implementor.OperationImp();2、抽象实现类 Implementor 及其具体实现类 ConcreteImplementorA和 ConcreteImplementorBpublic abstract class Implementorpublic abstract void OperationImp();public c

6、lass ConcreteImplementorA:Implementorpublic override void OperationImp()Console.WriteLine(0 Operation Method,this.GetType().Name);public class ConcreteImplementorB:Implementorpublic override void OperationImp()Console.WriteLine(0 Operation Method, this.GetType().Name);2、客户端代码static void Main(string

7、args)Abstraction a1 = new RefinedAbstraction();/ Set implementation and calla1.Implementor = new ConcreteImplementorA();a1.Operation();/ Change implemention and calla1.Implementor = new ConcreteImplementorB();a1.Operation();Console.ReadKey();3、实例运行结果四桥接模式实例分析(Example)1、场景业务对象(BusinessObject)与数据对象(Da

8、taObject)分离,即业务对象 CustormerBase与数据对象 DataObject 分离。业务对象 CustormerBase 完成更高层次的业务操作。结构如下图所示 CustomersBasel 类:定义一个抽象接口,维护对 DataObject 的引用。Custorers 类:被提炼的抽象。DataObject 类:数据抽象类主要操作有添加纪录。删除纪录、定位 Next 纪录、定位Prior 纪录,展示所有纪录,展示当前纪录等。CustomersData 类:数据抽象类的具体实现。2、代码1、 抽象接口 CustomersBase 及其具体实现类 Customersclass

9、CustomersBaseprivate DataObject _dataObject;protected string group;public CustomersBase(string group) this.group = group;/ Propertypublic DataObject Dataset _dataObject = value; get return _dataObject; public virtual void Next()_dataObject.NextRecord();public virtual void Prior()_dataObject.PriorRec

10、ord();public virtual void Add(string customer)_dataObject.AddRecord(customer);public virtual void Delete(string customer)_dataObject.DeleteRecord(customer);public virtual void Show()_dataObject.ShowRecord();public virtual void ShowAll()Console.WriteLine(Customer Group: + group);_dataObject.ShowAllRe

11、cords();/ / The RefinedAbstraction class/ class Customers : CustomersBase/ Constructorpublic Customers(string group): base(group)public override void ShowAll()/ Add separator linesConsole.WriteLine();Console.WriteLine(*);base.ShowAll();Console.WriteLine(*);2、 抽象数据对象类 DataObject 及其具体实现类 CustomersData

12、abstract class DataObjectpublic abstract void NextRecord();public abstract void PriorRecord();public abstract void AddRecord(string name);public abstract void DeleteRecord(string name);public abstract void ShowRecord();public abstract void ShowAllRecords();/ / The ConcreteImplementor class/ class Cu

13、stomersData : DataObjectprivate List _customers = new List();private int _current = 0;public CustomersData() / Loaded from a database _customers.Add(James Hao);_customers.Add(灵动生活);_customers.Add(郝*);_customers.Add(*宪*);_customers.Add(*玮);public override void NextRecord()if (_current 0)_current-;pub

14、lic override void AddRecord(string customer)_customers.Add(customer);public override void DeleteRecord(string customer)_customers.Remove(customer);public override void ShowRecord()Console.WriteLine(_customers_current);public override void ShowAllRecords()foreach (string customer in _customers)Consol

15、e.WriteLine( + customer);3、客户端代码static void Main(string args)/ Create RefinedAbstractionCustomersBase customers = new Customers(Shandong Province);/ Set ConcreteImplementorcustomers.Data = new CustomersData();/ Exercise the bridgecustomers.Show();customers.Next();customers.Show();customers.Next();customers.Show();customers.Add(Hao xianwei);customers.ShowAll();Console.ReadKey();3、实例运行结果五、总结(Summary )本文对桥接模式(Bridge Pattern)的概念、设计结构图、代码、使用场景、聚合与合成原则以及什么是聚合/合成进行了描述。以一个桥接模式实例进行了说明。桥接模式是比较常用和简单的设计模式。当系统有多维角度分类时,而每一种分类又有可能变化,可以考虑使用桥接模式。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号