设计模式-静态工厂

来源:互联网 发布:sql 删除表中所有数据 编辑:程序博客网 时间:2024/05/19 00:54

定义:提供一个创建对象实例的功能,而无需关心其具体实现

本质:选择实现

下面通过具体实例来说明静态工厂的含义、适用场景

-----------------------------------------------------------------------------------------------------------

Web应用开发中,log日志的写入几乎是每个项目都会遇到的功能,我们以此引入静态工厂

首先定义一个接口:LogApi

public interface LogApi{

public void writeLog();

}

接口内申明一个写入日志的方法,该方法可以为不同的实现类复写

假设日志可以写入数据库或者是文件,我们提供两种不同的实现

数据库实现:

public class DbLogApi implements LogApi {
@Override
public void writeLog() {
System.out.println("write log to db...");
}
}


文件实现:

public class FileLogApi implements LogApi {
@Override
public void writeLog() {
System.out.println("write log to file...");
}
}


有了这两种实现,我们就有了一个选择性,这个选择性是通过一个单独的factory类来实现,该类提供一个静态方法,静态方法可以通过接收不同的参数内容,返回相应的具体实现。


public class LogFactory {

public static LogApi getInstance(String type){
if("db".equals(type)){
return new DbLogApi();
}else if("file".equals(type)){
return new FileLogApi();
}else{
try {
throw new Exception("非法的日志类型");
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}

}


测试类:


public class Test {
public static void main(String[] args) {

LogApi api1 = LogFactory.getInstance("file");
api1.writeLog();

LogApi api2 = LogFactory.getInstance("db");
api2.writeLog();

LogApi api3 = LogFactory.getInstance("otherType");
api3.writeLog();

}
}

测试类分别接收了file db otherType三个参数,LogFactory#getInstance方法分别做出了三种不同的处理。

运行结果如下:


write log to file...
write log to db...
java.lang.Exception: 非法的日志类型
at com.pattern.simplefactory.LogFactory.getInstance(LogFactory.java:12)
at com.pattern.simplefactory.Test.main(Test.java:11)
Exception in thread "main" java.lang.NullPointerException
at com.pattern.simplefactory.Test.main(Test.java:12)


0 0
原创粉丝点击