工厂模式把创建对象的责任从客户端推出去,集中到工厂中创建。
以前生产力不发达的时候,社会分工不明确,每家都会种小麦,收割,磨面粉,自已自足。当面粉的生产工艺提升之后,所有家庭都需要提升面粉的生产工艺。随着生产力的发展,工业化来临,面粉的生产工艺需要使用机器,人们不再愿意如此高昂的成本,此时就需要再次具体的社会分工,于是面粉厂诞生,专注于磨面粉。每个家庭都放弃了生产面粉,把生产面粉的责任推出去,推给面粉厂。人们不再关心,生产面粉的工艺是怎样的,需要购买面粉,只管去跟工厂要,而不关心工厂是怎样生产的。工厂也会准确无误的生产出人们想要的面粉。当面粉生产工艺再次提升时,只需要工厂更新它的生产工艺即可。工厂的出现,使得面粉的生产工艺彻底的跟每个家庭解藕。不再发生关系。
单例模式把创建对象的责任拉回来,掌控在自已手中。跟工厂模式完全相反。
策略模式专注于要做什么,而不管怎么做(面向策略,而不是面向实现)。仅仅制造出标准即可,有了这个标准,就可以统一的去调用。也使得运行时可变成为了现实。将要做什么(策略)和由谁来做(实现)解藕。调用者不关心由谁来做,调用者只关心自已要做什么。
看起来工厂模式跟策略模式的共同点都是只关心要做什么,而不关心由谁来做。都是将客户端和实现者解藕,但是工厂模式侧重于怎样产生对象。而策略模式更侧重于制造算法(策略)标准。