首页 > 学院 > 开发设计 > 正文

多态工厂

2019-11-06 07:51:30
字体:
来源:转载
供稿:网友

参考《设计模式的艺术软件开发人员内功修炼之道》-刘伟 著

实验目的

多态工厂将创建具体对象的任务交给子类实现;隐藏工厂方法,通过在工厂中实现对象的对外接口,达到对业务逻辑屏蔽对象的目的。

实验代码

/***************** Factory Method Pattern *********************/package PolymorphicFactory;interface Logger { public void doLog();}class DBLogger implements Logger { public void doLog() { System.out.PRintln("DBLogger logging ..."); }}class FileLogger implements Logger { public void doLog() { System.out.println("FileLogger logging ..."); }}interface LoggerFactory { public Logger createLogger();}class DBLoggerFactory implements LoggerFactory { public Logger createLogger() { return new DBLogger(); }}class FileLoggerFactory implements LoggerFactory { public Logger createLogger() { return new FileLogger(); }}class Business { private Logger logger; private LoggerFactory loggerFactory; public Business() { loggerFactory = new DBLoggerFactory(); logger = loggerFactory.createLogger(); } public void DoWork() { logger.doLog(); }}/********************* HidenFactory ***********************/abstract class HidenFactory { public void doLog() { Logger logger = createLogger(); logger.doLog(); } abstract Logger createLogger();}class HidenDBFactory extends HidenFactory { @Override Logger createLogger() { // TODO Auto-generated method stub return new DBLogger(); }}class HidenFileFactory extends HidenFactory { @Override Logger createLogger() { // TODO Auto-generated method stub return new FileLogger(); }}public class PolymorphicFactoryTest { public static void main(String[] args) { // TODO Auto-generated method stub // PolymorphicFactory Business business = new Business(); business.DoWork(); // HiddenFactory HidenFactory hidenFactory = new HidenFileFactory(); hidenFactory.doLog(); }}

结果输出

DBLogger logging ...FileLogger logging ...

结论

多态工厂每一类子工厂负责创建一类子对象,易于扩展隐藏工厂方法对业务模块屏蔽工厂创建的对象,但是每次函数调用都要产生一个临时对象,加重垃圾收集负担
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表