合成复用原则
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
package top.fjy8018.designpattern.principle.compositionaggregation.after;
|
||||
|
||||
/**
|
||||
* 合成复用原则:要尽量使用组合,尽量不要使用继承
|
||||
*
|
||||
* @author F嘉阳
|
||||
* @date 2018-09-23 15:50
|
||||
*/
|
||||
public abstract class ADBConnection {
|
||||
public abstract String getConnection();
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package top.fjy8018.designpattern.principle.compositionaggregation.after;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
/**
|
||||
* @author F嘉阳
|
||||
* @date 2018-09-23 15:51
|
||||
*/
|
||||
@Slf4j
|
||||
public class AProductDao {
|
||||
|
||||
private final ADBConnection connection;
|
||||
|
||||
/**
|
||||
* 通过构造器注入,解除继承关系,同时符合里氏替换原则和开闭原则
|
||||
*
|
||||
* @param connection
|
||||
*/
|
||||
public AProductDao(ADBConnection connection) {
|
||||
this.connection = connection;
|
||||
}
|
||||
|
||||
public void addProduct() {
|
||||
log.info("使用{}", connection.getConnection());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package top.fjy8018.designpattern.principle.compositionaggregation.after;
|
||||
|
||||
/**
|
||||
* @author F嘉阳
|
||||
* @date 2018-09-23 15:56
|
||||
*/
|
||||
public class MysqlConnection extends ADBConnection {
|
||||
@Override
|
||||
public String getConnection() {
|
||||
return "MySQL数据库连接";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package top.fjy8018.designpattern.principle.compositionaggregation.after;
|
||||
|
||||
/**
|
||||
* @author F嘉阳
|
||||
* @date 2018-09-23 15:57
|
||||
*/
|
||||
public class OracleConnection extends ADBConnection {
|
||||
@Override
|
||||
public String getConnection() {
|
||||
return "Oracle数据库连接";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package top.fjy8018.designpattern.principle.compositionaggregation.before;
|
||||
|
||||
/**
|
||||
* 合成复用原则:要尽量使用组合,尽量不要使用继承
|
||||
*
|
||||
* @author F嘉阳
|
||||
* @date 2018-09-23 15:50
|
||||
*/
|
||||
public class DBConnection {
|
||||
public String getConnection() {
|
||||
return "MySQL数据库连接";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package top.fjy8018.designpattern.principle.compositionaggregation.before;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
/**
|
||||
* 直接使用继承,属于聚合关系,业务变更困难
|
||||
*
|
||||
* @author F嘉阳
|
||||
* @date 2018-09-23 15:51
|
||||
*/
|
||||
@Slf4j
|
||||
public class ProductDao extends DBConnection {
|
||||
|
||||
public void addProduct() {
|
||||
log.info("使用{}", super.getConnection());
|
||||
}
|
||||
}
|
||||
@@ -6,7 +6,7 @@ import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 李氏转换原则要求方法入参必须比父类范围更宽,返回值必须比父类更窄
|
||||
* 里氏替换原则要求方法入参必须比父类范围更宽,返回值必须比父类更窄
|
||||
*
|
||||
* @author F嘉阳
|
||||
* @date 2018-09-23 11:30
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
package top.fjy8018.designpattern.principle.compositionaggregation.before;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import top.fjy8018.designpattern.principle.compositionaggregation.after.AProductDao;
|
||||
import top.fjy8018.designpattern.principle.compositionaggregation.after.MysqlConnection;
|
||||
import top.fjy8018.designpattern.principle.compositionaggregation.after.OracleConnection;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class ProductDaoTest {
|
||||
|
||||
@Test
|
||||
void before() {
|
||||
ProductDao productDao = new ProductDao();
|
||||
productDao.addProduct();
|
||||
}
|
||||
|
||||
@Test
|
||||
void after() {
|
||||
// 变更交由业务层决定
|
||||
AProductDao productDao1 = new AProductDao(new MysqlConnection());
|
||||
productDao1.addProduct();
|
||||
AProductDao productDao2 = new AProductDao(new OracleConnection());
|
||||
productDao2.addProduct();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user