• 模板方法模式


    1.

    /**
     * 模板会有一个或者多个未现实方法,
     * 而且这几个未实现方法有固定的执行循序
     * 
     */
    public abstract class NetworkCourse {
    
        protected final void createCourse(){
            //1、发布预习资料
            this.postPreResource();
    
            //2、制作PPT课件
            this.createPPT();
    
            //3、在线直播
            this.liveVideo();
    
            //4、提交课件、课堂笔记
            this.postNote();
    
            //5、提交源码
            this.postSource();
    
            //6、布置作业,有些课是没有作业,有些课是有作业的
            //如果有作业的话,检查作业,如果没作业,完成了
            if(needHomework()){
                checkHomework();
            }
        }
    
        abstract void checkHomework();
    
        //钩子方法:实现流程的微调
        protected boolean needHomework(){return false;}
    
        final void postSource(){
            System.out.println("提交源代码");
        }
    
        final void postNote(){
            System.out.println("提交课件和笔记");
        }
    
        final void liveVideo(){
            System.out.println("直播授课");
        }
    
        final void createPPT(){
            System.out.println("创建备课PPT");
        }
    
        final void postPreResource(){
            System.out.println("分发预习资料");
        }
    
    }
    public class BigDataCourse extends NetworkCourse {
    
        private boolean needHomeworkFlag = false;
    
        public BigDataCourse(boolean needHomeworkFlag) {
            this.needHomeworkFlag = needHomeworkFlag;
        }
    
        void checkHomework() {
            System.out.println("检查大数据的课后作业");
        }
    
        @Override
        protected boolean needHomework() {
            return this.needHomeworkFlag;
        }
    }
    public class JavaCourse extends NetworkCourse {
        void checkHomework() {
            System.out.println("检查Java的架构课件");
        }
    }

    test

    public class NetworkCourseTest {
        public static void main(String[] args) {
    
            System.out.println("---Java架构师课程---");
            NetworkCourse javaCourse = new JavaCourse();
            javaCourse.createCourse();
    
            System.out.println("---大数据课程---");
            NetworkCourse bigDataCourse = new BigDataCourse(true);
            bigDataCourse.createCourse();
    
        }
    }

    示例二:

    /**
     * ORM映射定制化的接口
     * Created by Tom on 2019/3/16.
     */
    public interface RowMapper<T> {
        T mapRow(ResultSet rs,int rowNum) throws Exception;
    }
    public class MemberDao extends JdbcTemplate {
        public MemberDao(DataSource dataSource) {
            super(dataSource);
        }
    
        public List<?> selectAll(){
            String sql = "select * from t_member";
            return super.executeQuery(sql, new RowMapper<Member>() {
                public Member mapRow(ResultSet rs, int rowNum) throws Exception {
                    Member member = new Member();
                    //字段过多,原型模式
                    member.setUsername(rs.getString("username"));
                    member.setPassword(rs.getString("password"));
                    member.setAge(rs.getInt("age"));
                    member.setAddr(rs.getString("addr"));
                    return member;
                }
            },null);
        }
    }
    public class Member {
    
        private String username;
        private String password;
        private String nickname;
        private int age;
        private String addr;
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public String getNickname() {
            return nickname;
        }
    
        public void setNickname(String nickname) {
            this.nickname = nickname;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public String getAddr() {
            return addr;
        }
    
        public void setAddr(String addr) {
            this.addr = addr;
        }
    }
    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、创建语句集
                PreparedStatement pstm = this.createPrepareStatement(conn,sql);
                //3、执行语句集
                ResultSet rs = this.executeQuery(pstm,values);
                //4、处理结果集
                List<?> result = this.paresResultSet(rs,rowMapper);
                //5、关闭结果集
                this.closeResultSet(rs);
                //6、关闭语句集
                this.closeStatement(pstm);
                //7、关闭连接
                this.closeConnection(conn);
                return result;
            }catch (Exception e){
                e.printStackTrace();
            }
            return null;
        }
    
        protected void closeConnection(Connection conn) throws Exception {
            //数据库连接池,我们不是关闭
            conn.close();
        }
    
        protected void closeStatement(PreparedStatement pstm) throws Exception {
            pstm.close();
        }
    
        protected void closeResultSet(ResultSet rs) throws Exception {
            rs.close();
        }
    
        protected List<?> paresResultSet(ResultSet rs, RowMapper<?> rowMapper) throws Exception {
            List<Object> result = new ArrayList<Object>();
            int rowNum = 1;
            while (rs.next()){
                result.add(rowMapper.mapRow(rs,rowNum ++));
            }
            return result;
        }
    
        protected ResultSet executeQuery(PreparedStatement pstm, Object[] values) throws Exception {
            for (int i = 0; i < values.length; i++) {
                pstm.setObject(i,values[i]);
            }
            return pstm.executeQuery();
        }
    
        protected PreparedStatement createPrepareStatement(Connection conn, String sql) throws Exception {
            return conn.prepareStatement(sql);
        }
    
        public Connection getConnection() throws Exception {
            return this.dataSource.getConnection();
        }
    }
    public class MemberDaoTest {
    
        public static void main(String[] args) {
            MemberDao memberDao = new MemberDao(null);
            List<?> result = memberDao.selectAll();
            System.out.println(result);
        }
    }
  • 相关阅读:
    2019 Multi-University Training Contest 1
    2019江西省省赛
    2019牛客暑期多校训练营 第二场
    母函数
    树形DP
    蓝桥杯-标题:打印图形
    蓝桥杯-标题:史丰收速算
    蓝桥杯-标题:切面条
    蓝桥杯-标题:李白打酒
    蓝桥杯-标题:啤酒和饮料
  • 原文地址:https://www.cnblogs.com/flgb/p/10549877.html
Copyright © 2020-2023  润新知