大话设计模式----工厂模式

最近博主再看java的设计模式,今天学习了工厂模式,结合看的书和网上搜的资料,大体明白了工厂模式是怎么一回事。

工厂设计模式,考虑一个单独的类来做这个创造实例的过程,这就是工厂设计模式。

工厂设计模式分为简单工厂设计模式和抽象工厂设计模式,网上一部分人认为只有抽象工厂设计模式才是真正的设计模式,不过大部分人在用简单设计模式,那么这两种设计模式的区别在哪里呢:

简单工行设计模式:

一个抽象产品类,可以派生出多个具体产品类。

一个抽象工厂类,可以派生出多个具体工厂类。

每个具体工厂类只能创建一个具体产品类的实例。

抽象工厂设计模式:

多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。

一个抽象工厂类,可以派生出多个具体工厂类。

每个具体工厂类可以创建多个具体产品类的实例。


可能抽象工厂设计模式在一些大型项目里用的比较多,所以在这里我举一个简单工厂设计模式的栗子(想起了栗子哥)。

有一个题目,请用C++,Java,C#或VB.NET任意一种编写实现一个计算机控制台程序,要求输入两个数和运算符号,得到结果。首先这个代码并不难,我第一反应C++几个if判断一下,就写完了(毕竟在acm里待的成了习惯。。)。其实不然,首先,如果按照acm的风格来写,没有体现出面向对象的特点不说,并且效率也不高,比如加、减、乘、除这四个运算,加入我输入了加号,也就是说我多判断了3次if,有人说了,改用switch不就行了,但是一样不好维护啊。有人就说了,不就是维护吗,我多加几个类,多封装几次不就可以了。这样就真的好维护了?那再假如说,我要加一个开方运算,有人就要去修改operator类了,那我们为什么不让业务逻辑与界面逻辑分开呢,让他们的耦合度下降。哈,很好。但是,面向对象有三大特征,封装、继承、和多态。这里我们只用到了封装,那怎么用继承和多态呢(不要以为只是一个计算机小项目就用不到继承和多态了),继承就不多说了,我们可以抽象一个operator类,多态呢,这里就是简单工厂设计模式了,我们设一个工厂类,里面有一个switch,每一种情况我们实例化一个对象,这样我们就把耦合度降低,而且易于维护了。

可以见代码:

http://www.cnblogs.com/Files/cj723/BigTalkDesignPattenSourceCode.rar

现在的你还认为代码无错便是优吗?

其实,new一个实体对象是一件很谨慎的事情(不是指值对象),不要随便new。

其实对于抽象工厂模式,简单来说,就是可以把有一些联系或者相近的产品,放到一个工厂去生产,没有必要单独再开一个工厂了。

要记住一点,面向对象编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性和功能的对象的抽象集合才是类。

编程是一门技术,更是一门艺术。不能只满足与写完代码运行结果正确就完事,时常考虑如何让代码更加简洁,更加容易维护,容易扩展和复用,只有这样才能得到真正的提高。


ps:抽象工厂设计模式符合面向对象六大原则里的开闭原则、里式替换原则和依赖倒置原则,有兴趣的可以去搜搜看。

你可能感兴趣的:(大话设计模式)