• 设计模式课程 设计模式精讲 3-11 合成复用原则coding


    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 FilesJavajdk1.6.0_43injava.exe" "-javaagent:D:javadevolopKitideaanZhIntelliJ IDEA Community Edition 2018.1.4libidea_rt.jar=9805:D:javadevolopKitideaanZhIntelliJ IDEA Community Edition 2018.1.4in" -Dfile.encoding=UTF-8 -classpath "C:Program FilesJavajdk1.6.0_43jrelibcharsets.jar;C:Program FilesJavajdk1.6.0_43jrelibdeploy.jar;C:Program FilesJavajdk1.6.0_43jrelibextdnsns.jar;C:Program FilesJavajdk1.6.0_43jrelibextlocaledata.jar;C:Program FilesJavajdk1.6.0_43jrelibextsunjce_provider.jar;C:Program FilesJavajdk1.6.0_43jrelibextsunmscapi.jar;C:Program FilesJavajdk1.6.0_43jrelibjavaws.jar;C:Program FilesJavajdk1.6.0_43jrelibjce.jar;C:Program FilesJavajdk1.6.0_43jrelibjsse.jar;C:Program FilesJavajdk1.6.0_43jrelibmanagement-agent.jar;C:Program FilesJavajdk1.6.0_43jrelibplugin.jar;C:Program FilesJavajdk1.6.0_43jrelib
    esources.jar;C:Program FilesJavajdk1.6.0_43jrelib
    t.jar;F:xiangmu3XinIdeaoutproductiondesign_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 FilesJavajdk1.6.0_43injava.exe" "-javaagent:D:javadevolopKitideaanZhIntelliJ IDEA Community Edition 2018.1.4libidea_rt.jar=12553:D:javadevolopKitideaanZhIntelliJ IDEA Community Edition 2018.1.4in" -Dfile.encoding=UTF-8 -classpath "C:Program FilesJavajdk1.6.0_43jrelibcharsets.jar;C:Program FilesJavajdk1.6.0_43jrelibdeploy.jar;C:Program FilesJavajdk1.6.0_43jrelibextdnsns.jar;C:Program FilesJavajdk1.6.0_43jrelibextlocaledata.jar;C:Program FilesJavajdk1.6.0_43jrelibextsunjce_provider.jar;C:Program FilesJavajdk1.6.0_43jrelibextsunmscapi.jar;C:Program FilesJavajdk1.6.0_43jrelibjavaws.jar;C:Program FilesJavajdk1.6.0_43jrelibjce.jar;C:Program FilesJavajdk1.6.0_43jrelibjsse.jar;C:Program FilesJavajdk1.6.0_43jrelibmanagement-agent.jar;C:Program FilesJavajdk1.6.0_43jrelibplugin.jar;C:Program FilesJavajdk1.6.0_43jrelib
    esources.jar;C:Program FilesJavajdk1.6.0_43jrelib
    t.jar;F:xiangmu3XinIdeaoutproductiondesign_pattern" com.geely.design.principle.compositionaggregation.TestBizDao
    打开MySql连接
    
    Process finished with exit code 0
    3    疑问解答
    3.1  疑问解答

  • 相关阅读:
    systemmap 使用记录
    reading code record
    吞吐问题
    debug cps 原因
    fopen的a+和rewind
    debug cps && perf debug
    tfo以及quic的阅读笔记
    ss 和netstat
    debug open files
    多核编程 local global
  • 原文地址:https://www.cnblogs.com/1446358788-qq/p/11228029.html
Copyright © 2020-2023  润新知