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ù)。