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;
}
}
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;
}
}