目录
FactoryMethod 工厂方法模式
目录
[TOC]
1. 概述
1.1. Head First设计模式定义
定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。
1.2. 自我理解
工厂方法其实是由简单工厂和模板模式结合起来的一种,一般工厂只针对一个对象初始化,而在初始化对象之后有一些事情需要做,那么把要做的事情都写到工厂里面也是很常见的事情。
1.3. 工厂方法的组成
抽象工厂角色:是具体工厂角色必须实现的接口或者必须继承的父类。
具体工厂角色:它含有和具体业务逻辑有关的代码,由应用程序调用以创建对应的具体产品的对象。实现了父类或接口中定义的抽象工厂方法。
抽象产品角色:它是具体产品继承的父类或者是实现的接口。
具体产品角色:具体工厂角色所创建的对象就是此角色的实例。
2. UML
3. Example
3.1. 场景
比如现在我们数据存储框架,MySQL、Oracle、Redis等都可能用于我们项目中,我们针对于不同的数据存储框架做对应的工厂。而每个工厂都要做连接的初始化,连接池管理等。每个数据库的初始化方式不一样,但是都需要检查传入的数据库地址、用户名、密码等是否为Null。
我们利用简单工厂+模板模式结合起来可以解决该现象。
3.2. FactoryMethod设计模式的代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
/** * Created * Date: 2021/06/10 16:33 <br/> * Description: 工厂方法 * * @author jomin@loserzhao.com * @see */ public class FactoryMethodPatthernDemo { public static void main(String[] args) { DataBase mysqlDataBase = new MySQLDataBaseFactory().createDataBase(); mysqlDataBase.list(); DataBase hbaseDataBase = new HBaseDataBaseFactory().createDataBase(); hbaseDataBase.list(); } interface DataBase{ void list(); } static class MySQLDataBase implements DataBase{ public void list() { System.out.println("MySQL execute => [select a,b,c from xxx ...]"); } } static class HBaseDataBase implements DataBase{ public void list() { System.out.println("HBase execute => [HTable scan ...]"); } } static abstract class AbstractDataBaseFactory { public DataBase createDataBase(){ checkInitDataBaseArgs(); return initDataBase(); } private void checkInitDataBaseArgs(){ System.out.println("校验所有初始化数据库的参数...."); } protected abstract DataBase initDataBase(); } static class MySQLDataBaseFactory extends AbstractDataBaseFactory { private static final MySQLDataBase instance = new MySQLDataBase(); @Override protected DataBase initDataBase() { System.out.println("MySQL init done!"); return instance; } } static class HBaseDataBaseFactory extends AbstractDataBaseFactory { private static final HBaseDataBase instance = new HBaseDataBase(); @Override protected DataBase initDataBase() { System.out.println("HBase init done!"); return instance; } } } |
原创文章,转载请注明: 转载自LoserZhao – 诗和远方[ http://www.loserzhao.com/ ]
本文链接地址: http://www.loserzhao.com/java/designpattern/factory-method-designpattern.html
文章的脚注信息由WordPress的wp-posturl插件自动生成
0 条评论。