简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例,看如下代码实现
第一个文件:IDB.java
-
public interface IDB {
-
-
public void add();
-
-
public void update();
-
-
public void query();
-
-
public void delete();
-
}
2、第二个文件MySqlDB.java
-
public class MySqlDB implements IDB {
-
-
@Override
-
public void add() {
-
System.out.println("MySQL -- add()");
-
}
-
-
@Override
-
public void delete() {
-
System.out.println("MySQL -- delete()");
-
}
-
-
@Override
-
public void query() {
-
System.out.println("MySQL -- query()");
-
}
-
-
@Override
-
public void update() {
-
System.out.println("MySQL -- update()");
-
}
-
}
3、第三个文件OracleDB.java
-
public class OracleDB implements IDB {
-
-
@Override
-
public void add() {
-
System.out.println("Oracle -- add()");
-
}
-
-
@Override
-
public void delete() {
-
System.out.println("Oracle -- delete()");
-
}
-
-
@Override
-
public void query() {
-
System.out.println("Oracle -- query()");
-
}
-
-
@Override
-
public void update() {
-
System.out.println("Oracle -- update()");
-
}
-
-
}
4、第四个文件DBFactory.java
-
import com.test.product.IDB;
-
import com.test.product.impl.MySqlDB;
-
import com.test.product.impl.OracleDB;
-
-
/**
-
* 简单工厂
-
*/
-
public class DBFactory {
-
-
public IDB getDB(String type){
-
if("mysql".equals(type)){
-
return new MySqlDB();
-
}else{
-
return new OracleDB();
-
}
-
}
-
}
5、第五个文件TestMain.java
-
import com.test.product.IDB;
-
-
public class TestMain {
-
-
public static void main(String [] args){
-
DBFactory factory = new DBFactory();
-
IDB db = factory.getDB("mysql");
-
db.add();
-
}
-
}
6、简单工厂模式优缺点
优点:工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体类的对象.通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,仅仅需要负责“消费”对象就可以了。而不必管这些对象究竟如何创建及如何组织的.明确了各自的职责和权利,有利于整个软件体系结构的优化。
缺点:由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。
7、简单工厂模式的使用场景
(1)、工厂类负责创建的对象比较少;
(2)、客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心;
(3)、由于简单工厂很容易违反高内聚责任分配原则,因此一般只在很简单的情况下应用。
阅读(764) | 评论(0) | 转发(0) |