学习创建型模式,逐渐领会了面向接口编程的妙处,实现依赖抽象的原则。学习结构型模式,使我看到了使用对象组合带来的好处,相对继承,能带来很多优点,这在Bridge和Decorator模式中尤其明显。其实,结构型模式在项目中随处可见,以前的项目中不自觉就会用到,虽然以前不知道那就是模式,当然,很多时候,我并没有对那些对象进行抽象和提炼,仍然是强耦合。
型模式都有点类似,无非是把类的职责剥离开来,通过两个部分类的组合来实现复杂的功能,而这两部分往往是独立变化的,通过隔离它们,自然能带来好处——更能面对变化的挑战。而如果用继承,要面对多个方面或方向的变化则很困难。
1、Adapter、Bridge、Facade
一个对象提供了一定程度上的间接性,都通过别的对象接口向他们转发请求。实际上,就是把接受请求和处理请求的对象进行了隔离,接受请求对象把处理交给处理请求的对象来处理,它们都是可以独立变化的。
的不同点在于目的不同,Adapter解决接口不兼容问题,它使得接口不兼容的类可以协同工作,而不需要考虑这些接口的实现,以及这些类的演化趋势,它就相当于一个转换器,转发请求。Bridge模式解决的是抽象和实现独立变化的问题,它将抽象和实现隔离,并进行桥接,使得这两部分可以独立变化。抽象部分有稳定的接口,由实现部分来具体实现。
Adapter和Bridge模式通常用于不同的软件生命周期阶段。Adapeter算是补救措施,当两个类不兼容而又必须协同工作时,用它进行转接,此处耦合使用前不可预见。而使用Bridge模式,则事先知道:一个抽象有多个实现部分,并且这两部分独立演化,如果没有这个需求,也就不要使用Bridge模式。Adapter模式在类设计好后实施,而Bridge模式在类设计好前实施。
Adapter和Facade的区别,Facade模式并不是Adapter的集合,也就是说它并不是一组对象的适配器。Adapter复用以前的一个接口,而Facade模式重新定义一个接口,在对外提供的接口内使用一些子对象进行操作。Adapter使两个已有接口协同工作,而不是定义新的接口。
2、Composite、Decorator、Proxy
Composite和Decorator模式都基于递归组合组织可变数目的对象,但是他们的目的截然不同。Composite通过统一单一对象和组合对象的接口,使得对外透明化,客户程序不需要知道它们的任何细节,使用单一对象和组合对象如此一致,它重在表示,即怎么表示单一对象和组合对象,怎么使用起来具有一致性?而Decorator模式解决的是对象功能扩展的问题,它把对象本身的变化和其扩展变化隔离开来,使得新的对象扩展功能如此简单,摆脱了为扩展多个子对象的多个功能带来子类膨胀化问题,同时也为实现在运行时动态扩展对象功能提供了可能,这通过单纯继承无法做到。在思想上,它和Bridge模式如出一辙。
Decorator和Proxy都引用其他对象,向这个对象转发请求,但是,他们有不同的设计目的。Proxy不能动态的添加或删除对象的扩展功能,也不为递归组合而设计。它的作用是当访问一个实体对象不方便和不符合要求时,为这个实体对象提供一个代理对象,通过这个代理对象向其转发请求,进行处理,如远程访问。在Proxy模式中,实体对象实现了要访问的关键功能,代理对象提供或拒绝客户对它的访问;而Decorator模式中,组件即主体对象仅提供了部分或基本功能,一个或多个Decorator对象实现其他功能。Decorator适合在编译时不能确定其全部功能的情况,可以在运行时刻动态添加或删除功能。
转载于:https://www.cnblogs.com/Charly/archive/2007/07/04/805999.html