资源预览内容
第1页 / 共23页
第2页 / 共23页
第3页 / 共23页
第4页 / 共23页
第5页 / 共23页
第6页 / 共23页
第7页 / 共23页
第8页 / 共23页
第9页 / 共23页
第10页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第八章结构型模式1结构型模式涉及到结构型模式涉及到如何组合类和对象以获得如何组合类和对象以获得更大的结构更大的结构。结构型结构型类模式类模式采用采用继承机制来组合接口或实继承机制来组合接口或实现现。一个简单的例子是。一个简单的例子是采用多重继承方法采用多重继承方法将将两个以上的类组合成一个类,结果这个类包两个以上的类组合成一个类,结果这个类包含了所有父类的性质。含了所有父类的性质。这一模式尤其有助于多个独立开发的类库协这一模式尤其有助于多个独立开发的类库协同工作。同工作。2结构型对象模式不是对接口和实现进行组合,而是描述了如何对一些对象进行组合,从而实现新功能的一些方法。因为可以在运行时刻改变对象组合关系,所以对象组合方式具有更大的灵活性,而这种机制用静态类组合是不可能实现的。3适配器模式(ADAPTER)类对象结构型模式组合模式(COMPOSITE)对象结构型模式装饰模式(DECORATOR)对象结构型模式4Adapter模式:适配器使得一个接口(adaptee的接口)与其他接口兼容,从而给出了多个不同接口的统一抽象。为此,类适配器对一个adaptee类进行私有继承。这样,适配器就可以用adaptee的接口标识它的接口。5Composite模式:描述了如何构造一个类层次结构,这一结构由两种类型的对象(基元对象和组合对象)所对应的类构成。其中的组合对象使得你可以组合基元对象以及其他的组合对象,从而形成任意复杂的结构。6Decorator模式:描述了如何动态地为对象添加职责。这一模式采用递归方式组合对象,从而允许你添加任意多的对象职责。78.1适配器模式。意图将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能够一起工作的那些类可以一起工作。8。别名包装器Wrapper9。动机见文档。10。适用性1.你想使用一个已经存在的类,而它的接口不符合你的需要。2.你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类协同工作。3.你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。11。结构类适配器:类适配器使用多重继承对一个接口与另一个接口进行匹配对象适配器:对象适配器依赖于对象组合12类适配器13对象适配器14。参与者Target:定义Client使用的与特定领域相关的接口。Client:与符合Target接口的对象协同。Adaptee:定义一个已经存在的接口,这个接口需要适配。Adapter:对Adaptee的接口与Target接口进行适配。15对象适配器模型代码原型classTargetpublicvirtualvoidRequest()Console.WriteLine(CalledTargetRequest();classAdapter:TargetprivateAdaptee_adaptee=newAdaptee();publicoverridevoidRequest()/Possiblydosomeotherwork/andthencallSpecificRequest_adaptee.SpecificRequest();classAdapteepublicvoidSpecificRequest()Console.WriteLine(CalledSpecificRequest();staticvoidMain()/CreateadapterandplacearequestTargettarget=newAdapter();target.Request();/WaitforuserConsole.ReadKey();OutputCalledSpecificRequest()16。协作Client在在Adapter实例上调用一些操作。接着实例上调用一些操作。接着适配器调用适配器调用Adaptee的操作实现这个请求。的操作实现这个请求。17客户使用适配器的过程:客户通过目标接口调用适配器的方法对适配器发出请求适配器使用被适配者接口把请求转换成被适配者的一个或多个调用接口(客户与被适配者是解耦的,一个不知道另一个)客户接收到调用的结果,但并未察觉这一切是适配器在起转换作用适配器实现了目标接口,而此目标接口是由被适配者所组合的18。优点和缺点(效果)类适配器和对象适配器有不同的权衡。类适配器:用一个具体的Adapter类对Adaptee和Target进行匹配。结果是当我们想要匹配一个类以及所有它的子类时,类Adapter将不能胜任工作。使得Adapter可以重定义Adaptee的部分希望,因为Adapter是Adaptee的一个子类。仅仅引入了一个对象,并不需要额外的指针以间接得到Adaptee.19对象适配器则:允许一个Adapter与多个Adaptee即Adaptee本身以及它的所有子类同时工作。Adapter也可以一次给所有的Adaptee添加功能。使得重定义Adaptee的希望比较困难。这就需要生成Adaptee的子类并且使得Adapter引用这个子类而不是引用Adaptee本身。20使用Adapter模式时需要考虑的其他一些因素有:Adapter的匹配程度。Adapter的工作量取决于Target接口与Adaptee接口的相似程度。可插入的Adapter。使用双向适配器通过透明操作。使用适配器的一个潜在问题是,它们不对所有的客户都透明。被适配的对象不再兼容Adaptee的接口,因此并不是所有Adaptee对象可以被使用的地方它都可以被使用。双向适配器提供了这样的透明性。在两个同步的客户需要用不同的方法查看同一个对象时,双向适配器尤其有用。21。实现1.使用C+实现适配器类。在使用C+实现适配器类时,Adapter类应该采用公共方式公共方式继承Target类,并且用私有方式私有方式继承Adaptee类。因此,Adapter类应该是Target的子类型,但不是Adaptee的子类型。2.可插入的适配器。首先为Adaptee找到一个窄接口,即可用于适配的最小操作集。对于这个窄接口,有以下三个实现途径:使用抽象操作。使用代理对象。参数化的适配器。22。代码示例见文档。23
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号