Net设计模式实例之桥接模式 Bridge Pattern.docx

上传人:b****6 文档编号:3277423 上传时间:2022-11-21 格式:DOCX 页数:12 大小:167.92KB
下载 相关 举报
Net设计模式实例之桥接模式 Bridge Pattern.docx_第1页
第1页 / 共12页
Net设计模式实例之桥接模式 Bridge Pattern.docx_第2页
第2页 / 共12页
Net设计模式实例之桥接模式 Bridge Pattern.docx_第3页
第3页 / 共12页
Net设计模式实例之桥接模式 Bridge Pattern.docx_第4页
第4页 / 共12页
Net设计模式实例之桥接模式 Bridge Pattern.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

Net设计模式实例之桥接模式 Bridge Pattern.docx

《Net设计模式实例之桥接模式 Bridge Pattern.docx》由会员分享,可在线阅读,更多相关《Net设计模式实例之桥接模式 Bridge Pattern.docx(12页珍藏版)》请在冰豆网上搜索。

Net设计模式实例之桥接模式 Bridge Pattern.docx

Net设计模式实例之桥接模式BridgePattern

Net设计模式实例之桥接模式(BridgePattern)

一、桥接模式简介(BriefIntroduction)

桥接模式(BridgePattern),将抽象部分与它的实现部分分离,使的抽象和实现都可以独立地变化。

Decoupleanabstractionfromitsimplementationsothatthetwocanvaryindependently.。

什么是聚合/组合:

聚合(Aggregation),当对象A被加入到对象B中,成为对象B的组成部分时,对象B和对象A之间为聚合关系。

聚合是关联关系的一种,是较强的关联关系,强调的是整体与部分之间的关系。

场景:

商品和他的规格、样式就是聚合关系。

类与类的聚合关系图

 

 

组合(Composite),对象A包含对象B,对象B离开对象A没有实际意义。

是一种更强的关联关系。

人包含手,手离开人的躯体就失去了它应有的作用。

场景:

Window窗体由滑动条slider、头部Header和工作区Panel组合而成。

类与类的组合关系图

聚合与合成原则:

尽量使用聚合或者组合,尽量不使用类继承。

对象的继承关系是在编译时就定义好的,所以无法在运行时改变从父类继承的实现。

子类的实现与它的父类有着非常紧密的依赖关系,以至于父类实现中的任何变化必然会导致子类发生变化。

当需要复用子类时,如果集成下来的实现不符合解决新的问题,则父类必然重写或被其他更合适的类替换。

这种依赖关系限制了灵活性并最终限制了复用性。

二、解决的问题(WhatToSolve)

当系统有多维角度分类时,而每一种分类又有可能变化,这时考虑使用桥接模式比较合适。

三、桥接模式分析(Analysis)

1、桥接模式结构

 

Abstraction类:

业务抽象类,定义一个抽象接口,维护对Impementor的引用.

RefinedAbstraction类:

具体实现类,被提炼的抽象

Implementor类:

定义一个抽象实现类,此抽象类与Abstraction类不一定完全相同。

Implementor类提供了一些原始的操作,而Abstraction类是对这些原始操作一个更高层次的封装.

ConcreteImplementorA,ConcreteImplementorA类:

具体实现

2、代码

1、业务抽象类Abstraction及其提炼出的具体实现类RefinedAbstraction

publicabstractclassAbstraction

{

protectedImplementor_implementor;

 

publicImplementorImplementor

{

set{_implementor=value;}

get{return_implementor;}

}

 

publicvirtualvoidOperation()

{

_implementor.OperationImp();

}

}

 

publicclassRefinedAbstraction:

Abstraction

{

publicoverridevoidOperation()

{

_implementor.OperationImp();

}

}

 

2、抽象实现类Implementor及其具体实现类ConcreteImplementorA

和ConcreteImplementorB

publicabstractclassImplementor

{

publicabstractvoidOperationImp();

}

 

publicclassConcreteImplementorA:

Implementor

{

publicoverridevoidOperationImp()

{

Console.WriteLine("{0}OperationMethod",this.GetType().Name);

}

}

 

publicclassConcreteImplementorB:

Implementor

{

publicoverridevoidOperationImp()

{

Console.WriteLine("{0}OperationMethod",this.GetType().Name);

}

}

 

2、客户端代码

staticvoidMain(string[]args)

{

Abstractiona1=newRefinedAbstraction();

 

//Setimplementationandcall

a1.Implementor=newConcreteImplementorA();

a1.Operation();

 

//Changeimplementionandcall

a1.Implementor=newConcreteImplementorB();

a1.Operation();

 

Console.ReadKey();

}

3、实例运行结果

 

四.桥接模式实例分析(Example)

1、场景

业务对象(BusinessObject)与数据对象(DataObject)分离,即业务对象CustormerBase与数据对象DataObject分离。

业务对象CustormerBase完成更高层次的业务操作。

结构如下图所示

 

CustomersBasel类:

定义一个抽象接口,维护对DataObject的引用。

Custorers类:

被提炼的抽象。

DataObject类:

数据抽象类主要操作有添加纪录。

删除纪录、定位Next纪录、定位Prior纪录,展示所有纪录,展示当前纪录等。

CustomersData类:

数据抽象类的具体实现。

2、代码

1、抽象接口CustomersBase及其具体实现类Customers

classCustomersBase

{

privateDataObject_dataObject;

protectedstringgroup;

publicCustomersBase(stringgroup)

{

this.group=group;

}

//Property

publicDataObjectData

{

set{_dataObject=value;}

get{return_dataObject;}

}

publicvirtualvoidNext()

{

_dataObject.NextRecord();

}

publicvirtualvoidPrior()

{

_dataObject.PriorRecord();

}

 

publicvirtualvoidAdd(stringcustomer)

{

_dataObject.AddRecord(customer);

}

 

publicvirtualvoidDelete(stringcustomer)

{

_dataObject.DeleteRecord(customer);

}

 

publicvirtualvoidShow()

{

_dataObject.ShowRecord();

}

 

publicvirtualvoidShowAll()

{

Console.WriteLine("CustomerGroup:

"+group);

_dataObject.ShowAllRecords();

}

}

 

///

///The'RefinedAbstraction'class

///

classCustomers:

CustomersBase

{

//Constructor

publicCustomers(stringgroup)

 

:

base(group)

{

}

publicoverridevoidShowAll()

{

//Addseparatorlines

Console.WriteLine();

Console.WriteLine("**************************");

base.ShowAll();

Console.WriteLine("**************************");

}

}

 

2、抽象数据对象类DataObject及其具体实现类CustomersData

abstractclassDataObject

{

publicabstractvoidNextRecord();

 

publicabstractvoidPriorRecord();

 

publicabstractvoidAddRecord(stringname);

 

publicabstractvoidDeleteRecord(stringname);

 

publicabstractvoidShowRecord();

 

publicabstractvoidShowAllRecords();

 

}

///

///The'ConcreteImplementor'class

///

classCustomersData:

DataObject

{

privateList_customers=newList();

privateint_current=0;

 

publicCustomersData()

{

//Loadedfromadatabase

_customers.Add("JamesHao");

_customers.Add("灵动生活");

_customers.Add("郝**");

_customers.Add("*宪*");

_customers.Add("**玮");

}

 

publicoverridevoidNextRecord()

{

if(_current<=_customers.Count-1)

{

_current++;

}

}

 

publicoverridevoidPriorRecord()

{

if(_current>0)

{

_current--;

}

}

 

publicoverridevoidAddRecord(stringcustomer)

{

_customers.Add(customer);

}

publicoverridevoidDeleteRecord(stringcustomer)

{

_customers.Remove(customer);

}

publicoverridevoidShowRecord()

{

Console.WriteLine(_customers[_current]);

}

publicoverridevoidShowAllRecords()

{

foreach(stringcustomerin_customers)

{

Console.WriteLine(""+customer);

}

}

}

 

3、客户端代码

staticvoidMain(string[]args)

{

//CreateRefinedAbstraction

CustomersBasecustomers=newCustomers("ShandongProvince");

//SetConcreteImplementor

customers.Data=newCustomersData();

 

//Exercisethebridge

customers.Show();

customers.Next();

customers.Show();

customers.Next();

customers.Show();

customers.Add("Haoxianwei");

customers.ShowAll();

 

Console.ReadKey();

}

3、实例运行结果

五、总结(Summary)

本文对桥接模式(BridgePattern)的概念、设计结构图、代码、使用场景、聚合与合成原则以及什么是聚合/合成进行了描述。

以一个桥接模式实例进行了说明。

桥接模式是比较常用和简单的设计模式。

当系统有多维角度分类时,而每一种分类又有可能变化,可以考虑使用桥接模式。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1