对strategy,bridge,decorate模式的理解

来源:互联网 发布:centos nginx安装目录 编辑:程序博客网 时间:2024/04/30 09:44

区分两个模式的方法应该从解决的问题上看,也就是从context上分析。
我觉得简单的说Strategy模式是从N变化为1+N,原来有N个类但是这N个类里面只有某个算法的区别,我们把N个算法提取出来就变成了1个抽象类(不要理解成Java中的abstract class,而是这个抽象类表示一个概念)和N个实现类(同理,不要理解成对前面那个抽象类的实现,而是辅助实现抽象类的某个功能的一个继承体系)。注意这里只有一个继承体系。
而Bridge模式是从M×N变化为M+N,原来系统中有M×N个类,但是从中可以提取出N个算法(或者辅助类)和M个主体(我想不出一个好的名次)。这样构成了两个继承体系,N个算法(颜料)构成一个继承体系,M个主体类(毛笔的不同型号)构成一个继承体系。两个继承体系可以独立的变化。
从解决的问题上看,二者都要解决重复代码的问题,但是前者不强调锥把的变化,而后者强调,并且强调锥头和所有锥把的兼容。我认为这才是二者的根本区别。
装饰类模式的理解,假设有M个主类,N个可以装饰在主类上装饰类,装饰类之间对主类的装饰可以有相互之间的制约关系,也可以没有制约关系,M*(N!)=>M+N+1,这里的1表示N个装饰类的抽象父类。