• 设计模式七大原则——迪米特原则以及设计原则的核心思想


    一、基本介绍

      尽量使用合成/聚合的方式,而不是使用继承

    二、应用实例

      

       此处有两个类,A类和B类,然后我们接到一个需求,需要在B类中使用到A类的方法

      解决方案1:直接让B类继承A类

      

      代码实现:

     1 public class A {
     2     void operation1(){
     3         //do something...
     4     }
     5 
     6     void operation2(){
     7         //do something...
     8     }
     9 }
    10 
    11 class B extends A{
    12     @Override
    13     void operation1() {
    14         super.operation1();
    15     }
    16 
    17     @Override
    18     void operation2() {
    19         super.operation2();
    20     }
    21 }

       分析:如果只是让B类去使用A类中的方法,使用继承就会让B类和A类之间的耦合性增强(一旦A类发生任何变动就会影响到B类),可以使用合成/聚合的方式替代继承

      解决方案2:让A类作为B类方法的参数来实现依赖关系

      

      代码实现:

     1 public class A {
     2     void operation1() {
     3         //do something...
     4     }
     5 
     6     void operation2() {
     7         //do something...
     8     }
     9 }
    10 
    11 class B {
    12     void operation1(A a) {
    13         a.operation1();
    14         a.operation2();
    15     }
    16 }

      解决方案3:将A类的实例作为B类的成员变量来实现聚合关系

      

      代码实现:

     1 public class A {
     2     void operation1() {
     3         //do something...
     4     }
     5 
     6     void operation2() {
     7         //do something...
     8     }
     9 }
    10 
    11 class B {
    12     private A a;
    13 
    14     public void setA(A a) {
    15         this.a = a;
    16     }
    17 }

      解决方案4:将A类在B类中实例化来实现组合关系

      

      代码实现:

     1 public class A {
     2     void operation1() {
     3         //do something...
     4     }
     5 
     6     void operation2() {
     7         //do something...
     8     }
     9 }
    10 
    11 class B {
    12     A a = new A();
    13 }

    三、设计原则的核心思想

      (1)找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起

      (2)针对接口编程,而不是针对实现编程

      (3)为了交互对象之间的松耦合设计而努力

  • 相关阅读:
    02点睛Spring4.1-Java Config
    01点睛Spring4.1-依赖注入
    00点睛Spring4.1-环境搭建
    Cas(09)——通过Proxy访问其它Cas应用
    Cas(08)——单点登出
    Cas(07)——建立使用Cas进行单点登录的应用
    Cas(06)——基于数据库的认证
    Cas(05)——修改Cas Server的其它配置
    remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu, package name is libncurses5-dev, on Redhat and derivates it is ncurses-devel.
    解放双手—Cobbler批量自动化部署多版本系统
  • 原文地址:https://www.cnblogs.com/yijiahao/p/14502519.html
Copyright © 2020-2023  润新知