合成(组合)/聚合复用原则

Posted linbq1911

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了合成(组合)/聚合复用原则相关的知识,希望对你有一定的参考价值。

1.定义:尽量使用对象组合/聚合,而不是继承关系达到软件复用的目的

2.聚合has-A和组合contains-A

3.优点:可以使系统更加灵活,降低类与类之间的耦合度,一个类的变化对其他类造成的影响相对较少

4.思考:何时使用合成/聚合、继承?聚合has-A、组合contains-A、继承is-A

5.实例目录package

技术分享图片

6.实例UML类图

技术分享图片

7.代码

1 package com.geely.design.principle.compositionaggregation;
2 
3 public abstract class DBConnection {
4     /*public String getConnection(){
5         return "mysql数据库连接";
6     }*/
7     public abstract String getConnection();
8 }
1 package com.geely.design.principle.compositionaggregation;
2 
3 public class MySQLConnection extends DBConnection{
4     public String getConnection() {
5         return "MySQL数据库连接";
6     }
7 }
1 package com.geely.design.principle.compositionaggregation;
2 
3 public class PostgreSQLConnection extends DBConnection {
4     public String getConnection() {
5         return "PostgreSQL数据库连接";
6     }
7 }
 1 package com.geely.design.principle.compositionaggregation;
 2 
 3 public class ProductDao{// extends DBConnection
 4     private DBConnection dbConnection;
 5 
 6     public void setDbConnection(DBConnection dbConnection) {
 7         this.dbConnection = dbConnection;
 8     }
 9 
10     public void addProduct(){
11         String conn = dbConnection.getConnection();
12         System.out.println("使用"+conn + "增加产品");
13     }
14 }
 1 package com.geely.design.principle.compositionaggregation;
 2 
 3 public class Test {
 4     public static void main(String[] args) {
 5         ProductDao productDao = new ProductDao();
 6         productDao.setDbConnection(new MySQLConnection());
 7         productDao.addProduct();
 8         productDao.setDbConnection(new PostgreSQLConnection());
 9         productDao.addProduct();
10     }
11 }

 

以上是关于合成(组合)/聚合复用原则的主要内容,如果未能解决你的问题,请参考以下文章

设计模式七大原则之合成复用原则

合成聚合原则

合成聚合原则

组合/聚合复用原则

合成聚合原则

设计模式-合成复用原则-》面向对象设计原则