简单工厂模式的思想就是用一个单独的类来管理实例化不同子类的过程,这个类就是工厂类。下面我们用一个简单的计算器程序来介绍,计算器只包含加减乘除功能。
运算类是父类,下面有算法是继承它的子类,而简单工厂类则依赖于运算类。
我们只需要输入运算符号,工厂就帮我们实例化出想要的对象,利用上转型对象,返回父类的方式实现了结果。
优点:工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建那个具体类的对象。用户在使用时可以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何创建以及如何组织的。有利于整个软件体系结构的优化。
缺点:由于工厂类集中了所有实例的创建逻辑,这就直接导致一旦这个工厂出了问题,所有的客户端都会受到牵连;而且由于简单工厂模式的产品是基于一个共同的抽象类或者接口,这样一来,一旦产品的种类增加的时候,既有不同的产品接口或者抽象类的时候,工厂类就需要判断何时创建何种种类的产品,这就和创建何种种类的产品相互混淆在了一起,违背了单一职责,导致系统丧失灵活性和可维护行。而且更重要的是,简单工厂模式违背了“开发封闭原则”,就是违背了“系统对扩展开放,对修改关闭”的原则,因为当我新增加一个产品的时候必须修改工厂类,相应的工厂类就需要重新编译一遍。