设计模式-静态工厂
来源:互联网 发布: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)
- 设计模式--静态工厂
- 静态工厂设计模式
- 设计模式-静态工厂
- 设计模式(2) 静态工厂
- 设计模式案例--工厂模式--简单工厂(静态工厂)(simplefactory)
- 设计模式之静态工厂模式
- 设计模式(一)--静态工厂模式
- 设计模式之静态工厂模式
- 设计模式初探之静态工厂模式
- JAVA设计模式之工厂模式(静态工厂模式)
- 设计模式-Simple Factory 简单工厂模式(静态工厂)
- [设计模式](二):工厂模式(简单工厂|静态工程、工厂方法|多工厂、抽象工厂)
- java设计模式 单例设计模式+静态工厂模式
- iOS设计模式:静态工厂相关
- iOS设计模式:静态工厂相关
- 设计模式之静态工厂的使用
- Nutz 设计模式应用 --- 静态工厂方法
- 工厂模式:静态工厂
- Predefined Macros 预定义宏
- JavaScript-长按及鼠标事件
- 十年软件测试老鸟的小小感悟
- java.util.ResourceBundle使用详解
- nyoj 挑战密室 模拟题
- 设计模式-静态工厂
- 正则表达式从零开始学习系列(二)
- mysql 安装
- 【LeetCode】145. Binary Tree Postorder Traversal
- (转)深入理解JavaScript系列(2):揭秘命名函数表达式
- 使用node.js搭建一个简单的本地服务器
- Android studio 中类似eclipse中alt / 的快捷键
- JQUERY插件学习之jqPlot
- LONG型时间获取年月日,时分秒