个人随笔
目录
一、创建型-工厂方法(Factory Pattern)模式
2020-09-09 21:28:32

学习的第一种设计模式是23种设计模式中最简单也是用图比较广的一种,叫做工厂方法模式,工厂方法模式分为三种:普通工厂模式、多个工厂方法模式、静态工厂方法模式,下面我们一个个来学习吧。

案例

调用数据库的查询方法的例子,数据库有Oracle和MySQL两种。

一、普通工厂方法模式

建立一个工厂类,对实现同一接口的一些类进行实例的创建

1、UML


额,这个未注册的水印也是醉了。

2、创建DB接口
  1. public interface DB {
  2. public String select();
  3. }
3、创建实现DB接口的Oracle和MySQL类
  1. public class Oracle implements DB{
  2. @Override
  3. public String select() {
  4. return "Oracle数据库查询";
  5. }
  6. }
  1. public class MySQL implements DB{
  2. @Override
  3. public String select() {
  4. return "MySQL数据库查询";
  5. }
  6. }
3、创建普通工厂类(SimpleFactory)
  1. /**
  2. * 普通工厂方法模式
  3. * 普通工厂方法模式,根据传过来的类型生成相应的对象
  4. * @author suibibk.com
  5. */
  6. public class SimpleFactory {
  7. public DB product(String DBName) {
  8. if("Oracle".equals(DBName)) {
  9. return new Oracle();
  10. }else if("MySQL".equals(DBName)) {
  11. return new MySQL();
  12. }else {
  13. System.out.println("请输入正确的类型");
  14. return null;
  15. }
  16. }
  17. public static void main(String[] args) {
  18. SimpleFactory simpleFactory = new SimpleFactory();
  19. DB db1 = simpleFactory.product("Oracle");
  20. DB db2 = simpleFactory.product("MySQL");
  21. System.out.println(db1.select());
  22. System.out.println(db2.select());
  23. }
  24. }
4、启动测试

运行上面的main方法,结果如下

  1. Oracle数据库查询
  2. MySQL数据库查询

二、多个工厂方法模式

是对普通工厂方法模式的改进,在普通方法模式中,如果传递的字符串出错,则不能正确的创建对象,而多个工厂方法模式是提供了多个工厂方法,分别创建对象。

1、UML

2、创建多个工厂类(ManyFactory)
  1. /**
  2. * 多个工厂方法模式
  3. * 为每一种产品都提供一个创建方法
  4. * @author suibibk.com
  5. *
  6. */
  7. public class ManyFactory {
  8. public DB productOracle() {
  9. return new Oracle();
  10. }
  11. public DB productMySQL() {
  12. return new MySQL();
  13. }
  14. public static void main(String[] args) {
  15. ManyFactory manyFactory = new ManyFactory();
  16. DB db1 = manyFactory.productOracle();
  17. DB db2 = manyFactory.productMySQL();
  18. System.out.println(db1.select());
  19. System.out.println(db2.select());
  20. }
  21. }

接口和产品不变

3、启动测试

运行上面的main方法,结果如下

  1. Oracle数据库查询
  2. MySQL数据库查询

三、静态工厂方法模式

将上面的多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可。

1、UML

跟多个工厂方法类一样,只不过工厂里的方法是静态方法罢了。这里就不画了。

2、创建静态工厂类(StaticFactory)
  1. /**
  2. * 静态工厂方法模式
  3. * 将多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可。
  4. * @author suibibk.com
  5. *
  6. */
  7. public class StaticFactory {
  8. public static DB productOracle() {
  9. return new Oracle();
  10. }
  11. public static DB productMySQL() {
  12. return new MySQL();
  13. }
  14. public static void main(String[] args) {
  15. DB db1 = StaticFactory.productOracle();
  16. DB db2 = StaticFactory.productMySQL();
  17. System.out.println(db1.select());
  18. System.out.println(db2.select());
  19. }
  20. }

接口和产品不变

3、启动测试

运行上面的main方法,结果如下

  1. Oracle数据库查询
  2. MySQL数据库查询

总结

工厂方法模式分为三种:普通工厂模式、多个工厂方法模式、静态工厂方法模式。适合情况:凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建。在以上三种模式中,第一种如果传入的字符串有误,则不能正确的创建对象,第三种相对于第二种不需要实例化工厂类,所以,大多数情况下,我们会选择第三种—静态工厂方法模式。

 289

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2