Java 设计模式之“工厂方法”之我见

    Java 设计模式中有一个叫做工厂方法的设计模式。那么什么叫工厂方法呢?

    【我们的烦恼】

    我们平时写程序的时候,经常会对同一个抽象类的子类或同一个接口的多个子实现进行选择,这时候我们就需要知道类的继承关系以及每个子类具体实现,每个子类的功能。例如:一个日志记录类Logger有两个子类FileLogger、ConsoleLogger。分别是面向文件和面向控制台的日志类。我们编写程序的时候会根据需要选择其中之一来对Logger的对象进行实例化。

    可能一:Logger log=new FileLogger()

    可能二:Logger log=new ConsoleLogger()

    我们除了清楚类的继承关系及每个类的应用范围歪,还需要判断当前的应用环境,例如到底是应该使用文件日志记录方式呢,还是控制台日志显示方式。

    【工厂方法】

     为了解决上面的烦恼,提出了工厂方法的模式。

     工厂方法就是为了解决对类的对象实例化时对子类的选择的烦恼。

     它是这样实现的,用一个属性文件(如logger.properties)来决定当前日志记录的环境选择。例如,我们可以将logger.properties的文件内容设置如下:

     Filelogging=on

     这表示,当前的日志记录到文件中。我们需要使用文件日志类来实例化Logger对象log。

    我们声明一个名为LoggerFactory的类,该类应该有一个名为getLogger()的方法,它检查当前Filelogging的属性,然后调用不同的实现类实例化一个对象,并以Logger类型返回。

     这样,我们在使用的时候,只需要如此简单地就可以得到响应的日志记录类了。如下:

     Logger log=new LoggerFactory().getLogger();

    【我的看法】

     我觉得工厂方法并非如其所说的那么完美。虽然在直接使用的时候我们免去了判断当前环境的烦恼,但是我们却需要在属性文件里面进行属性的设置。虽然在使用时我们免去了对类继承关系的了解,但是在工厂类的设计的时候,了解类结构是免不了的。所以我认为:工厂方法使得使用傻瓜化,但是增加了工厂类设计的麻烦。不是吗?

    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值