进阶学习(3.2)Factory Method Pattern 工厂方法模式

37 篇文章 0 订阅
25 篇文章 0 订阅

1  类的实例化不在工厂接口里面实例化, 而是在工厂子类里面实例化

2  使用者无需关注子类工厂里面的逻辑是怎么写的, 只需要知道我调用的这个方法能实 现什么功能, 我不管具体实现

3  需要添加新功能时, 直接添加一个相关工厂类, 进行实现

 

案例: sqlsession factory 工厂, 可以创建不同数据库的工厂对象, 并不代表真实就是这样写的奥

定义工厂接口, 我不管子工厂怎么实现, 我只需要知道, 我能通过这个方法, 获取到一个我想要的对象, 得到预计的结果

/**
 *  抽象工厂
         */
public interface SesssionFactory {

    /**
     *  这个地方定义的接口即是 ‘工厂方法模式的特征’
     *  由实现的子类工厂决定创建什么session
     * @return
     */
    SqlSession getSession();
}
/**
 * 工厂抽象对象
 */
public interface SqlSession {

    /**
     * 执行sql
     * @param sql   sql
     */
    void execute(String sql);
}
SqlSession 对象就是我想要获取的, 我不管他底层是什么连接, 全部由子工厂去具体完成

工厂实例1, 

/**
 *  oracle 连接
 */
public class OracleSessionFactory implements SesssionFactory{

    @Override
    public SqlSession getSession() {
        return new OracleSessionBean();
    }
}

工厂实例2

/**
 *  oracle 连接
 */
public class MysqlSessionFactory implements SesssionFactory{

    @Override
    public SqlSession getSession() {
        return new MysqlSessionBean();
    }
}

两个具体工厂对象

/**
 *  工厂对象, oracle 实例
 */
public class OracleSessionBean implements SqlSession {

    @Override
    public void execute(String sql) {
        System.out.println("ORACLE 连接, 执行SQL");
    }
}


/**
 *  工厂对象, mysql 实例
 */
public class MysqlSessionBean implements SqlSession {
    @Override
    public void execute(String sql) {
        System.out.println("MYSQL 连接, 执行SQL");
    }
}

执行结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值