设计模式课程 设计模式精讲 3-11 合成复用原则coding
2024-08-28 20:07:28
1 课堂概念
1.0 继承关系的选择
1.1 起名
1.2 定义
1.3 组合聚合优缺点
1.4 继承优缺点
1.5 组合聚合区别
2 代码演练
2.1 反例
2.2 正例
3 疑问解答
3.1 疑问解答
1 课堂概念
1.0 继承关系的选择(自己理解)
搜索,官方解答,说继承关系是is a的关系,在我看来,正方形is a 长方形,详看3.1解答和上节的案例。
所以看是否有继承关系,通常要看子类和父类共用的方法,子类是否能够实现实现父类的方法。(自己理解)
1.1 起名
合成复用原则,组合复用原则,聚合复用原则
1.2 定义
尽量使用组合,聚合,而不是继承关系达到复用软件的目的。
1.3 组合聚合(黑箱复用)
优点:降低耦合,提高系统的灵活性。使一个类的变化对其他类造成的影响较小。
缺点:会生成较多的对象进行管理。
1.4 继承(白箱复用)
优点:新的扩展性容易实现,修改和扩展相对容易。
缺点:父类的方法侵入性的带给子类,父类方法的改变,子类也必须改变,相比耦合较高。
1.5 组合聚合区别
关系强弱,组合强,聚合弱。
2 代码演练
2.1 反例
类关系:
测试类:
package com.geely.design.principle.compositionaggregation; public class TestBizDao {
public static void main(String [] args){
BizDaoNegative bizDaoNegative = new BizDaoNegative();
bizDaoNegative.getDBConnection();
} // public static void main(String [] args){
// BizDao bizDao = new BizDao();
//// DBConnection dbConnection = new MySqlConnection();
//// bizDao.setDbConnection(dbConnection);
// DBConnection dbConnection = new OracleConnection();
// bizDao.setDbConnection(dbConnection);
// bizDao.handleBiz();
// }
}
dao类:
package com.geely.design.principle.compositionaggregation; public class BizDaoNegative extends DBConnectionNegative{ @Override
public void getDBConnection() {
super.getDBConnection();
}
}
获取连接类:
package com.geely.design.principle.compositionaggregation; public class DBConnectionNegative {
public void getDBConnection(){
System.out.println("打开MySql连接");
}
}
打印结果:
"C:\Program Files\Java\jdk1.6.0_43\bin\java.exe" "-javaagent:D:\java\devolopKit\idea\anZh\IntelliJ IDEA Community Edition 2018.1.4\lib\idea_rt.jar=9805:D:\java\devolopKit\idea\anZh\IntelliJ IDEA Community Edition 2018.1.4\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.6.0_43\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\jce.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\resources.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\rt.jar;F:\xiangmu3\Xin\Idea\out\production\design_pattern" com.geely.design.principle.compositionaggregation.TestBizDao
打开MySql连接 Process finished with exit code 0
2.2 正例
类图:
测试类:
package com.geely.design.principle.compositionaggregation; public class TestBizDao {
// public static void main(String [] args){
// BizDaoNegative bizDaoNegative = new BizDaoNegative();
// bizDaoNegative.getDBConnection();
// } public static void main(String [] args){
BizDao bizDao = new BizDao();
DBConnection dbConnection = new MySqlConnection();
// bizDao.setDbConnection(dbConnection);
// DBConnection dbConnection = new OracleConnection();
bizDao.setDbConnection(dbConnection);
bizDao.handleBiz();
}
}
dao类:
package com.geely.design.principle.compositionaggregation; public class BizDao {
private DBConnection dbConnection; public void setDbConnection(DBConnection dbConnection) {
this.dbConnection = dbConnection;
} public void handleBiz(){
dbConnection.getConnection();
}
}
获取连接抽象类:
package com.geely.design.principle.compositionaggregation; public abstract class DBConnection {
public abstract void getConnection();
}
获取Mysql连接类:
package com.geely.design.principle.compositionaggregation; public class MySqlConnection extends DBConnection{
@Override
public void getConnection() {
System.out.println("打开MySql连接");
}
}
获取Oracle连接类:
package com.geely.design.principle.compositionaggregation; public class OracleConnection extends DBConnection{
@Override
public void getConnection() {
System.out.println("打开oracle连接");
}
}
打印结果
"C:\Program Files\Java\jdk1.6.0_43\bin\java.exe" "-javaagent:D:\java\devolopKit\idea\anZh\IntelliJ IDEA Community Edition 2018.1.4\lib\idea_rt.jar=12553:D:\java\devolopKit\idea\anZh\IntelliJ IDEA Community Edition 2018.1.4\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.6.0_43\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\jce.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\resources.jar;C:\Program Files\Java\jdk1.6.0_43\jre\lib\rt.jar;F:\xiangmu3\Xin\Idea\out\production\design_pattern" com.geely.design.principle.compositionaggregation.TestBizDao
打开MySql连接 Process finished with exit code 0
3 疑问解答
3.1 疑问解答
最新文章
- 激活Windows 8.1 RTM原来如此简单
- Awesomplete - 零依赖的简单自动完成插件
- js字符串转成数字的三种方法
- CORS(跨域资源共享)简介
- CentOS 7数据库mysql和mariadb手动安装冲突的问题解决
- json字符串转成 Map/List
- 十大免费教程资源帮助新手快速学习JavaScript
- xfire框架内部基本结构解析
- (基础篇)PHP与Web页面交互
- 黄聪:wordpress中PHP运行错最有效解决办法Fatal error: Out of memory (allocated 6029312)(转)
- 在ubuntu on windows 上安装jekyll
- 【转】使用Beaglebone Black的I2C (二)——使用C语言和i2c-dev驱动
- Attribute 特性
- ajax数据显示,使用js通用模板
- 服务器:RAID、AHCI、IDE
- nRF51800 蓝牙学习 进程记录 2:关于二维数组 执念执战
- Python -堆的实现
- python学习总结(函数进阶)
- Scrapy运行错误:ImportError: No module named win32api
- ThreadLocal原理