[置顶] 大话设计模式——工厂三姐妹

       年前把大话设计这本书看完了,但一直拖着没有总结,昨晚米老师、师哥师姐、12期小伙伴们齐聚一堂,对设计模式进行了学术交流,收获颇丰。这篇博文研究的是简单工厂VS工厂方法VS抽象工厂。

       经过仔细对比,我们不难发现:工厂方法是简单工厂的升级版,抽象方法是工厂方法的升级版。它们之间的宏观关系是逐渐抽象,逐渐深化的。

       我们第一遍做机房收费系统的时候,是把所有的代码都堆在一起,并没有分层的概念,虽然做出的小程序能运行,但是耦合性非常强,不便于维护和扩展。好比在活字印刷术之前,需求一旦改变就需要推到原程序,从头再来。

       简单工厂的出现正好解决了上述问题。简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关类。对于客户端来说,去除了与具体产品的依赖。但它却违反了开放封闭原则,例如如果要增加一个运算符的功能,就需要给简单工厂类的方法里加"Case"的分支条件。

                 [置顶] 大话设计模式——工厂三姐妹_第1张图片

        工厂方法弥补了简单工厂的不足。工厂方法使一个类的实例化延迟到其子类,让子类决定实例化哪一个类。工厂方法把内部逻辑判断移到了客户端代码来实现。如果现在想增加一个运算符,只需额外增加一个运算符子类和实现接口的子类即可,不需要对已经写好的类进行修改。符合了开放封闭原则。但是它也优缺点,需要修改客户端,并且增加了额外的开发量。

                [置顶] 大话设计模式——工厂三姐妹_第2张图片

        抽象方法弥补了工厂方法的不足,抽象工厂提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。用工厂方法的思路是,sqlserverUser类、accessUser类、sqlDepentment类、AccessDepartment类需要四个工厂来创建,而抽象工厂对他们的公共部分进行了抽象,只需两个工厂就能胜任。抽象工厂最大的好处便是易于交换产品系列,由于具体工厂类,在一个应用中只需要在初始化的时候出现一次,这就使得改变一个应用的具体工厂变得非常容易,它值需要改变具体工厂即可使用不同的产品配置。同样它也有缺点,如果需求就来自增加功能,比如现在要增加项目表Project,至少要增加三个类,IProject、SqlserveProject、AccessProject,还需要更改IFactory、SqlserverFactory和AccessFactory才能完全实现。这太糟糕了。

               [置顶] 大话设计模式——工厂三姐妹_第3张图片

米老师分享小故事:

        师母给米老师做最爱吃的的红烧肉,简单工厂是师母。当米老师的需求改变时,想吃清蒸鲤鱼,而恰恰师母只会做红烧肉,于是米老师花钱聘请了一个川味的厨师,专门伺候一日三餐。工厂方法是厨师。久而久之,川味吃腻了,米老师的需求又变了,想吃鲁味的、湘味的、粤味。于是去各种口味的饭店去吃饭。此时,各种口味饭店的就是抽象工厂。

总结:

       每一种模式都有它自己的优缺点,我们应该熟知他们的优缺点并灵活运用。米老师分享的小故事充满趣味性。让我们很容易就理清了他们之间的区别和联系。将学习生活化、故事化,我们的学习将变得非常高效且充满欢乐。

         



你可能感兴趣的:(设计模式,总结,电脑)