设计模式今天学到桥接模式,发现和装饰模式怎么就那么像呢,有种老虎老鼠傻傻分不清楚的赶脚!
1.定义
装饰模式:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活!
桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立的变化。
在我前面的博客《设计模式第三站--装饰模式》中对装饰模式进行过分析,在这里不再赘述,直接来看桥接模式。
桥接模式中的“抽象与实现的分离”,并不是说抽象类与其派生类相分离,也就是说使用组合的方式而不是继承的方式。因为,继承中父类在实现过程中的任何变化都必然导致子类中的变化,这样的话,如果不想让子类发生父类的那些 变化就变得绝不可能。
所以说白了,桥接模式就是应用合成/聚合复用原则的模式,而装饰模式是使用继承方式的模式。所以区别之一就出来了,一个使用的是继承方式,另一个使用的却是合成方式。
2.角度不同
装饰模式是动态地添加一些额外功能的模式,也就是说装饰模式是适应新需求而添加新功能,并且不影响其他对象的一种模式;而桥接模式是适应变化维度的一种模式,它在于将对象的各个维度的变化都独立开来,使一些变化不受其他因素变化的影响。
3.“独立”不同
装饰模式中实现的是不同功能的子类进行封闭后独立的子类,但仍旧是紧耦合(因为是继承方式),而桥接模式中是将变化独立开,降低类之间的耦合度,尽最大可能实现松耦合(组合方式)。
4.适用性
·装饰模式的适用性:
1)在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。
2)处理那些可以撤消的职责。
3)当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类。
·桥接模式的适用性:
1).如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的联系。
2).设计要求实现化角色的任何改变不应当影响客户端,或者说实现化角色的改变对客户端是完全透明的。
3).一个构件有多于一个的抽象化角色和实现化角色,系统需要它们之间进行动态耦合。
4).虽然在系统中使用继承是没有问题的,但是由于抽象化角色和具体化角色需要独立变化,设计要求需要独立管理这两者。
以上就是我对装饰模式和桥接模式的认识和分析,希望大家可以给我提一些建议或者意见!谢谢!