Skip to content

Latest commit

 

History

History
212 lines (158 loc) · 4.95 KB

5.模版方法与适配器方法.md

File metadata and controls

212 lines (158 loc) · 4.95 KB

模版方法

public abstract class NetworkCourse {
    protected final void createCourse(){
        // 1.分发资料
        this.postPreResource();

        // 制作ppt
        this.createPPT();

        // 在线直播
        this.liveVideo();

        // 提交课件
        this.postNote();

        // 提交源码
        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;
    }

    @Override
    void checkHomeWork() {
        System.out.println("检查大数据课后作业");
    }

    @Override
    protected boolean needHomeWork() {
        return this.needHomeWorkFlag;
    }
}

实现jdbcTemplate

public class JdbcTemplate {

    private DataSource dataSource;

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

    public List<?> executeQuery(String sql, RowMapper<?> rowMapper, Object[] value) {
        try {
            // 1.获取链接
            Connection connection = this.getConnection();

            // 2.创建语句
            PreparedStatement preparedStatement = this.createPrepareStatement(connection, sql);

            // 3.执行语句
            ResultSet rs = this.executeQuery(preparedStatement, value);

            // 4.处理结果集
            List<?> result = this.parseResultSet(rs, rowMapper);

            // 5.关闭结果集
            this.closeResult(rs);

            // 6.关闭语句集
            this.closeStatement(preparedStatement);

            // 7.关闭连接
            this.closeConnection(connection);

            return result;
        } catch (Exception exception) {
            exception.printStackTrace();
        }
        return null;
    }

    protected void closeConnection(Connection connection) throws SQLException {
        // 数据库连接池
        connection.close();;
    }

    protected void closeStatement(PreparedStatement preparedStatement) throws SQLException {
        preparedStatement.close();
    }

    private void closeResult(ResultSet rs) throws SQLException {
        rs.close();
    }

    public List<?> parseResultSet(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 ResultSet executeQuery(PreparedStatement preparedStatement, Object[] value) throws SQLException {
        for (int i = 0; i < value.length; i++) {
            preparedStatement.setObject(i, value[i]);
        }
        return preparedStatement.executeQuery();
    }

    private PreparedStatement createPrepareStatement(Connection connection, String sql) throws SQLException {
        return connection.prepareStatement(sql);
    }

    private Connection getConnection() throws Exception {
        return this.dataSource.getConnection();
    }
}
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>() {
            @Override
            public Member mapRow(ResultSet resultSet, int rowNum) throws Exception {
                Member member = new Member();
                member.setUsername(resultSet.getString("username"));;
                member.setPassword(resultSet.getString("password"));
                member.setAge(resultSet.getInt("age"));
                member.setAddr(resultSet.getString("addr"));
                return member;
            }
        }, null);
    }
}

模版模式的缺点

1.类书目的增加

2.间接的增加了系统实现的复杂性

3.继承关系自身缺点,如果父类添加新的抽象方法,所有子类都要改一遍。

适配器方法

public class PowerAdapter implements DC5{

    private AC220 ac220;

    public PowerAdapter(AC220 ac220) {
        this.ac220 = ac220;
    }

    @Override
    public int outputDDC5V() {
        int adapterInput = ac220.outputAC220V();
        int adapterOutput = adapterInput / 44;
        return adapterOutput;
    }
}