JAVA设计模式—结构型模式总结

结构型模式描述如何组织类和对象以组成更大的结构。结构型类模式采用继承机制来组合接口和实现,结构型对象模式则采用组合聚合来组合对象以实现新功能,可以在运行时刻改变对象组合关系,具有更大灵活性,故这里只关注结构型对象模式。常见的结构型模式有7种:ABCDFFP(Adapter,Bridge,Composite,Decorator,Façade,Flyweight,Proxy)

1.适配器模式(Adapter)使由于接口不兼容而不能一起工作的类可以一起工作。有类或对象适配器模式,解决已存在目标客户接口和已存在功能类接口不兼容的问题。对象适配器模式实现上是适配器对象包含一个被适配器对象来进行接口转换;一般是项目改造或扩充时才用到。适配器模式使得一个接口和其它接口兼容,从而给出了多个不同接口的统一抽象。

Adapter模式通过类的继承或者对象的组合侧重于转换已有的接口,类适配器采用“多继承”的实现方式,带来了不良的高耦合,所以一般不推荐使用。对象适配器采用“对象组合”的方式,更符合松耦合精神。

JAVA设计模式—结构型模式总结_第1张图片


2.桥接模式(Bridge):将抽象和实现分离,使他们可以独立的变化

JAVA设计模式—结构型模式总结_第2张图片

协作:Abstraction将Client的请求转发给它的Implementor对象。

3.组合模式:将对象组合成树状层次结构,使用户对单个对象和组合对象具有一致的访问性

Composite模式使得客户对单个对象和组合对象的使用具有一致性。从而解决了解决客户程序与复杂对象容器的解耦,即:通过继承统一的接口,我们可以将容器对象及其子对象看成同一类对象使用,以减少对象使用中的复杂度。

实例:java单元测试框架Junit定义了两个概念:TestCase和TestSuite,前者是一个编写测试的类,后者是一个不同TestCase的集合,集合里也可以再包含TestCase,这样运行一个TestSuite会将其包含的TestCase全部运行。Junit采用了组合模式将TestCase和TestSuite统一起来,创建一个Test接口来扮演Component角色,TestCase扮演Leaf角色,Testsuite扮演Composite角色。Junit是一个偏重安全性的组合模式,因此用TestCase和Testsuite时不能直接用Test代替。

4.装饰者模式(Decorator):动态的给对象增加一些职责。就增加功能来说,Decorator模式相比生成子类更为灵活。[GOF 《设计模式》]Decorator模式采用对象组合而非继承的手法,实现了在运行时动态的扩展对象功能的能力,而且可以根据需要扩展多个功能,避免了单独使用继承带来的“灵活性差”和“多子类衍生问题”。同时它很好地符合面向对象设计原则中“优先使用对象组合而非继承”和“开放-封闭”原则。

JAVA设计模式—结构型模式总结_第3张图片

实例:Junit采用了装饰模式,在java.extensions包中,TestDecorator、RepeatedTest便是对TestCase的装饰模式的扩展。使用方法如:TestDecorator test=new RepeatedTest(new TestXX(),3);。

5.外观模式(Facade):为子系统中的一组接口提供一个一致的界面,使这一子系统更加容易使用。外观模式用于给多个子系统定义一套统一的外观,描述了如何用单个对象表示整个子系统。Façade被客户角色调用,熟悉子系统的功能,内部根据客户角色已有的需求预定了几种功能组合。

JAVA设计模式—结构型模式总结_第4张图片

协作:客户程序通过发送请求给Façade的方式与子系统通信,Façade将这些消息转发给适当的子系统对象;使用Façade的客户程序不需要直接访问子系统对象。

6.享元模式:运用共享技术有效的支持大量细粒度对象。java中String的实现,细化对象共享粒度;

JAVA设计模式—结构型模式总结_第5张图片

协作:flyweight执行所需的状态必定是内部的或外部的,内部的状态存储与ConcreteFlyweight对象之中,而外部对象由Client对象存储或计算。当用户调用flyweight操作时将该状态传递给它。用户不应直接对ConcreteFlyweight类进行实例化,而只能从FlyweightFactory对象得到ConcreteFlyweight对象,这样可以保证它们适当地进行共享。

7.代理模式(Proxy):为其它对象提供一种代理以控制对这种对象的访问。代理模式提供了对对象的一些特有性质的一定程度上的间接访问,从而限制、增强或修改这些性质。

JAVA设计模式—结构型模式总结_第6张图片

你可能感兴趣的:(JAVA设计模式—结构型模式总结)