最近在读程杰老师的《大话设计模式》,个人感觉是绝佳的设计模式入门学习必备资料,它通过生动简洁的例子能让你迅速了解各个模式。今天学习Builder模式时,突然发现Builder模式和Strategy模式的类图非常相似。因此写下本文用于比较两个模式,深化对两个模式的认识。
先来看创建者模式的类图
再来看一下策略模式的类图
通过比较两者的类图,发现两者还是很相似的,都有一个抽象类,然后是具体实现类,最后是一个第三方类来组织和维护抽象类。不同的是创建者类还有一个产品类。
但是从功能上来说两者相差很远:
(1)建造者模式是创建型的,也就是说用来创建对象的,而策略模式属于行为型模式,通过将行为封装成对象来降低类之间的耦合度;
(2)策略模式的抽象类仅仅定义了一个算法接口,而建造者模式的抽象类则已经定义好了算法骨架或者过程的步骤,也就是说策略模式的各具体策略在实现上可以差之千里,但是建造者模式的具体建造者必须按照接口中定义好的骨架或步骤去实现;
(3)策略模式的StrategyContext类通过提供一个上下文环境来维护具体策略;而建造者模式的Director类则是封装了Product类的创建细节,便于客户端程序调用。