再次陈述:所有设计模式的核心是要满足以下需求:
当业务扩展时, 尽可能不要修改原有代码. (尤其是原来的程序员没写注释和文档的时候)
静态工厂:
这个最简单. 就是把创建对象这一过程封装到工厂类中, 不再直接生成对象,而是由工厂 来生成对象.
我们只对工厂提出创建要求.而且创建过程较为简单, 一个静态方法的调用即可创建产品对象的情况下,
我们就应该采用静态工厂模式. 当然创建过程中允许再次调用工厂类的其它静态方法,以分解创建逻辑.
简单工厂:
这个比静态工厂复杂一点, 这名字起的太不友好了.
当产品的创建过程较为复杂, 即,无法用工厂类的一个静态方法来解决的时候, 我们采取以下步骤:
构造一个工厂对象, 然后对工厂对象传递参数,创建一些工厂对象的属性,之后 才能创建产品对象.
再构造另一个工厂对象,然后传递不同的参数,创建另一个/另一批产品对象.
比简单工厂模式再复杂一些, 看. 这名字还是误导观众.
对简单工厂情况进一步扩展, 工厂类总是在扩展,总是在修改,这个不好. 那么 我们 定义好工厂类的基类后,
由工厂类的子类完成具体的创建过程,这样每个工厂类的子类就可以更加个性化的创建产品对象了.
抽象工厂模式:
比上一个再进一步. 现在我们考虑多种产品(N)的情况 .
每种产品有一个基类,以约束此种产品的共性.
上面我们已经有多个工厂子类了(M), 现在我们的每一个工厂子类都可以创建每一种产品, 当然,都可能有所差别.
M x N 我们现在要定义好这么多个具体的产品类, 每个工厂生成N个产品的本厂版本.