简介
设计模式之工厂模式分为三种:
1. 简单工厂模式(Simple Factory)
2. 工厂方法模式(Factory Method)
3. 抽象工厂模式(Abstract Factory)这里仅仅介绍一下前两种,最后一种开发中用的不多。至于他们的概念以及使用情景什么的,请点击http://www.baidu.com
简单工厂模式:
直接上例子:
public interface DB {
void close();
}
public class MySQL implements DB {
@Override
public void close() {
System.out.println("MySQL close");
}
}
public class Oracle implements DB{
@Override
public void close() {
System.out.println("Oracle close");
}
}
public class DBFactory {
public static MySQL getMySQL(){
return new MySQL();
}
public static Oracle getOracle(){
return new Oracle();
}
//还有一种常见的写法就是传进来一个flag,然后用switch case判断
}
public class Test {
public static void main(String[] args) {
MySQL mySQL = DBFactory.getMySQL();
mySQL.close();
// DBFactory2 dbFactory2 = new MySQLFactory2();
// dbFactory2.getDB().close();
}
}
//以上就是简单工厂模式,咋一看还是满足OCP的,实则不然,当在添加一种数据库时,比如SqlServer,工厂就需要在修改!所以,它并不满足OCP,因此诞生了工厂方法模式。如下:
- 工厂方法模式:
之前数据库接口以及实现类依旧不变,变化的是工厂的实现;
public interface DBFactory2 {
DB getDB();
}
public class MySQLFactory2 implements DBFactory2{
public DB getDB() {
return new MySQL();
}
}
public class OracleFactory2 implements DBFactory2{
public DB getDB() {
return new Oracle();
}
}
public class Test {
public static void main(String[] args) {
//
// MySQL mySQL = DBFactory.getMySQL();
// mySQL.close();
DBFactory2 dbFactory2 = new MySQLFactory2();
dbFactory2.getDB().close();
}
}
以上可知,工厂方法模式有一组实现了相同接口的工厂类,它显然满足OCP,当添加一个Sqlserver的时候,不需要修改工厂类,仅仅添加一个实现了工厂类的接口即可。
简单工厂不满足OCP,工厂方法满足OCP。到底是哪个好呢?这就要看需求喽。。。