背景
很多时候我们不知道客户具体需要执行哪种类型的操作,但是客户会给出我们对应的提示信息,那么我们的程序必须能够根据参数信息进行动态操作,这样的程序才是一个可扩展的程序。简单工厂模式应该是我们最常见的一种设计模式之一,他就是根据客户的意图选择对应的执行类型进行操作,实际上就是根据不同的参数实例化出不同的对象,所以叫做工厂。
1、使用意图
根据参数的不同实例化出对应的类型对象,对于那些需要大量 生成相同父类实例的程序,他可以避免了代码的重复。
2、生活实例
生活处处是例子
3、Java 例子(框架、JDK 、JEE)
曾经写过一个工具类,关于使用iReport生成html、excel、pdf、doc的报表的SDK,客户只需要传入数据和想要的报表类型,我就可以为他生成对应的类型的数据报表。这就是一个典型的简单工厂模式,一个工厂类 ReportFactory,一个总接口,IExport,声明导出方法export,然后,分别实现报表类型的导出方法。
4、模式类图
5、模式优点
个人觉得这个模式,最大的优点就是避免了代码重复,其次,逻辑上比较清晰。其他的优点估计都是缺点了吧,最大的缺点就是:违背了开放封闭原则,当你想要扩展一种类型的时候,不得不修改工厂类的工厂方法。
6、与类似模式比较
暂时还没有深究其他的工厂模式(工厂方法模式、抽象工厂模式),所以,也没什么好计较的。
另外,模式的改进的都是在ExportFactory的getExport实例方法中进行做手脚,比如把getExport方法变为静态的,那么就是一个静态工厂模式,为了避免的简单工厂模式违背开放封闭原则采用反射,实现动态获取类的实例等。