简单工厂模式和工厂方法模式

  1. 简介

    设计模式之工厂模式分为三种:
    1. 简单工厂模式(Simple Factory)
    2. 工厂方法模式(Factory Method)
    3. 抽象工厂模式(Abstract Factory)

    这里仅仅介绍一下前两种,最后一种开发中用的不多。至于他们的概念以及使用情景什么的,请点击http://www.baidu.com

  2. 简单工厂模式:

    直接上例子:

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,因此诞生了工厂方法模式。如下:

  1. 工厂方法模式:

之前数据库接口以及实现类依旧不变,变化的是工厂的实现;

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。到底是哪个好呢?这就要看需求喽。。。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值