工厂模式:将类的实例化放在另一个类中实现,屏蔽了类实例化的细节。
以生产汽车车门为例。
简单工厂模式:将所有车门产品放在同一个工厂生产。不能增加新的车门,否则要修改原工厂代码
工厂方法模式:定义一个工厂接口,用子工厂去生产产品,4个车门产品用4个子工厂去生产,可以任意增加新的车门,只要定义新的子工厂和子产品。
抽象工厂模式:引入了产品族的概念(由同一子工程生产的不同类型的实例为不同的产品族),将不同的产品族放在一个子工厂中生产,并且产品族之间存在约束。前右车门,后右车门是一个类型,可以看做一个产品族,前左车门和后左车门一样看做一个产品族。定义两个子工厂,工厂前和工厂后。工厂前生产前右,前左车门,工厂后生产后左后右两个车门。可以看出有一个前左车门就必须有一个前右车门,它们之间存在约束。这就是抽象工厂模式。抽象工厂模式不可以增加新产品但是可以增加产品线,例如三门车,可以新定义一个子中工厂和子中右车门和子中左车门类就可以了。