小菜学设计模式——简单工厂模式

本文介绍了简单工厂模式的应用场景和设计思路,通过一个报表生成工具的例子展示了如何根据不同的参数实例化相应的对象,以此来减少代码重复并提高程序的可扩展性。

背景

    很多时候我们不知道客户具体需要执行哪种类型的操作,但是客户会给出我们对应的提示信息,那么我们的程序必须能够根据参数信息进行动态操作,这样的程序才是一个可扩展的程序。简单工厂模式应该是我们最常见的一种设计模式之一,他就是根据客户的意图选择对应的执行类型进行操作,实际上就是根据不同的参数实例化出不同的对象,所以叫做工厂。

1、使用意图

    根据参数的不同实例化出对应的类型对象,对于那些需要大量 生成相同父类实例的程序,他可以避免了代码的重复。

2、生活实例

    生活处处是例子

3、Java 例子(框架、JDK 、JEE)

    曾经写过一个工具类,关于使用iReport生成html、excel、pdf、doc的报表的SDK,客户只需要传入数据和想要的报表类型,我就可以为他生成对应的类型的数据报表。这就是一个典型的简单工厂模式,一个工厂类 ReportFactory,一个总接口,IExport,声明导出方法export,然后,分别实现报表类型的导出方法。

4、模式类图

130532_gms2_1989321.png

5、模式优点

    个人觉得这个模式,最大的优点就是避免了代码重复,其次,逻辑上比较清晰。其他的优点估计都是缺点了吧,最大的缺点就是:违背了开放封闭原则,当你想要扩展一种类型的时候,不得不修改工厂类的工厂方法。

6、与类似模式比较

    暂时还没有深究其他的工厂模式(工厂方法模式、抽象工厂模式),所以,也没什么好计较的。

    另外,模式的改进的都是在ExportFactory的getExport实例方法中进行做手脚,比如把getExport方法变为静态的,那么就是一个静态工厂模式,为了避免的简单工厂模式违背开放封闭原则采用反射,实现动态获取类的实例等。


转载于:https://my.oschina.net/heweipo/blog/423793

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值