模板模式

1.使用場景

a.一次性實(shí)現(xiàn)一個(gè)算法的公共部分,將可變部分留給子類
b.各類中的公共方法,剝離變化后進(jìn)行提取放入共同的父類中

2.DEMO

2.1

/**
 * Description:促銷抽象類
 *
 * @date 2019-05-24 19:48
 */

public abstract class Promo {

    protected PromoType promoType;


    /**
     * Description:獲取促銷信息
     * @Date  2019-05-24 19:59
     * @Param [promoId]
     * @return java.lang.String
    **/

    public abstract String getPromoInfo(Long promoId);

    /**
     * Description:獲取促銷名稱
     * @Date  2019-05-24 19:48
     * @Param []
     * @return java.lang.String
    **/

    protected  final String getPromoName(Long promoId){
        //調(diào)用促銷mapper根據(jù)id查詢促銷名稱
        return "促銷名稱X";
    }

    /**
     * Description:獲取促銷范圍
     * @Date  2019-05-24 19:48
     * @Param []
     * @return java.lang.String
     **/

    protected  final String getPromoScope(Long promoId){
        //調(diào)用促銷mapper根據(jù)id查詢促銷范圍
        return "促銷范圍X";
    }


    /**
     * Description:獲取促銷標(biāo)簽
     * @Date  2019-05-24 19:48
     * @Param []
     * @return java.lang.String
     **/

    protected  final String getPromoLable(Long promoId){
        //調(diào)用促銷mapper根據(jù)id查詢促銷范圍
        return "促銷標(biāo)簽X";
    }
    
/**
 * Description:促銷類型枚舉
 *
 * @date 2019-05-24 19:55
 */

public enum PromoType {
    DOWN(1,"直降"),
    ADD_MONEY_BUY(2,"加價(jià)購");

    private int  typeCode;
    private String typename;

    PromoType(int typeCode, String typename) {
        this.typeCode = typeCode;
        this.typename = typename;
    }

    public int getTypeCode() {
        return typeCode;
    }

    public String getTypename() {
        return typename;
    }
}

/**
 * Description:直降促銷
 *
 * @date 2019-05-24 19:54
 */

public class PromoDown extends Promo{

    public PromoDown() {
        this.promoType=PromoType.DOWN;
    }

    @Override
    public String getPromoInfo(Long promoId) {
        String promoName = this.getPromoName(promoId);
        String promoScope = this.getPromoScope(promoId);
        String promoLable = this.getPromoLable(promoId);
        System.out.println("促銷名稱="+promoName);
        System.out.println("促銷范圍="+promoScope);
        System.out.println("促銷標(biāo)簽="+promoLable);
        System.out.println("促銷類型="+promoType.getTypename());
        return null;
    }
}

/**
 * Description:加價(jià)購促銷
 *
 * @date 2019-05-24 19:54
 */

public class AddMoneyBuy extends Promo{

    public AddMoneyBuy() {
        this.promoType=PromoType.ADD_MONEY_BUY;
    }

    @Override
    public String getPromoInfo(Long promoId) {
        String promoName = this.getPromoName(promoId);
        String promoLable = this.getPromoLable(promoId);
        System.out.println("促銷名稱="+promoName);
        System.out.println("促銷范圍=全場");
        System.out.println("促銷標(biāo)簽="+promoLable);
        System.out.println("促銷類型="+promoType.getTypename());
        return null;
    }
}

/**
 * Description:測試類
 *
 * @date 2019-05-24 20:06
 */

public class Test {

    public static void main(String[] args) {
        Promo down = new PromoDown();
        Promo addBuy = new AddMoneyBuy();

        System.out.println("---->獲取直降信息");
        down.getPromoInfo(1L);
        System.out.println("---->獲取加價(jià)購信息");
        addBuy.getPromoInfo(2L);
    }

}

2.2

/**
 * Description:ORM映射接口
 *
 * @date 2019-05-24 20:16
 */

public interface RowMapper<T> {

    T mapRow(ResultSet rs,int rowNum) throws Exception;
}

/**
 * Description:JDBC模板抽象類
 *
 * @date 2019-05-24 20:18
 */

public abstract class JdbcTemplate {

    private DataSource dataSource;

    public JdbcTemplate(DataSource dataSource) {
        this.dataSource = dataSource;
    }


    public List<?> executeQuery(String sql, RowMapper<?> rowMapper, Object[] values) {
        try {
            //1.獲取連接
            Connection conn = this.getConnection();
            //2.創(chuàng)建語句集
            PreparedStatement pstm = this.createPreparedStatement(conn, sql);
            //3.執(zhí)行語句集
            ResultSet rs = this.executeQuery(pstm, values);
            //4.處理結(jié)果集
            List<?> result = this.paresResultSet(rs, rowMapper);
            //5.關(guān)閉結(jié)果集
            this.closeResultSet(rs);
            //6.關(guān)于語句集
            this.closePreparedStatement(pstm);
            //7.關(guān)閉連接
            this.closeConnection(conn);
            return result;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;

    }

    private Connection getConnection() throws Exception {

        return this.dataSource.getConnection();

    }

    private PreparedStatement createPreparedStatement(Connection conn, String sql) throws Exception {
        return conn.prepareStatement(sql);
    }

    private ResultSet executeQuery(PreparedStatement pstm, Object[] values) throws Exception {
        for(int i=0;i<values.length;i++){
            pstm.setObject(i,values[i]);
        }
        return pstm.executeQuery();
    }

    private List<?> paresResultSet(ResultSet rs, RowMapper<?> rowMapper) throws Exception {
        List<Object> result = new ArrayList<>();
        int rowNum = 1;
        while (rs.next()){
            result.add(rowMapper.mapRow(rs,rowNum++));
        }
        return result;
    }

    private void closeResultSet(ResultSet rs) throws Exception {
        rs.close();
    }

    private void closePreparedStatement(PreparedStatement pstm) throws Exception {
        pstm.close();
    }

    private void closeConnection(Connection conn) throws Exception{
        conn.close();
    }
}

/**
 * Description:學(xué)生類
 *
 * @date 2019-05-24 20:48
 */

public class Student {

    private Long id;
    private String name;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

/**
 * Description:學(xué)生dao
 *
 * @date 2019-05-24 20:49
 */

public class StudentDao extends JdbcTemplate {


    public StudentDao(DataSource dataSource) {
        super(dataSource);
    }

    public List<?> selectAll(){

        String sql = "select * form student";
        return super.executeQuery(sql, new RowMapper<Student>() {
            @Override
            public Student mapRow(ResultSet rs, int rowNum) throws Exception {
                Student st = new Student();
                st.setId(rs.getLong("id"));
                st.setName(rs.getString("name"));
                return st;
            }
        },null);

    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文用來介紹 iOS 多線程中 GCD 的相關(guān)知識以及使用方法。這大概是史上最詳細(xì)、清晰的關(guān)于 GCD 的詳細(xì)講...
    花花世界的孤獨(dú)行者閱讀 581評論 0 1
  • 1. Vue 實(shí)例 1.1 創(chuàng)建一個(gè)Vue實(shí)例 一個(gè) Vue 應(yīng)用由一個(gè)通過 new Vue 創(chuàng)建的根 Vue 實(shí)...
    王童孟閱讀 1,097評論 0 2
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標(biāo)準(zhǔn)。 注意:講述HT...
    kismetajun閱讀 28,884評論 1 45
  • 我很愛折騰。 剛工作那幾年,拼命的一邊工作一邊學(xué)習(xí),終于拿到畢業(yè)證書和學(xué)位證書。 本來在原來公司好不容易快出頭了,...
    若愚123閱讀 333評論 0 2
  • 時(shí)鐘滴答滴答 走到了新的一年 歲月慢慢悠悠 告別了舊的四季 我們腳踏實(shí)地 一步一步 我們仰望天空 一次一次 擁有的...
    順山先生閱讀 426評論 0 2

友情鏈接更多精彩內(nèi)容