zoukankan      html  css  js  c++  java
  • 面相对象的几个设计原则

    单一职责

    一个类中的属性和方法要有很高的相关性,不然就拆开;如果一个类很庞大,则需要进一步细分职能,把相关性更高的归到一块。

    开闭原则

    对扩展开放,对修改关闭。

    极端要求就是:程序完成后,除非是修改错误,不然不能修改代码,只能扩展代码。

    比如一个功能,有多种实现方法,即有多个类型,不要用if-else这种分支在一个类中去指定其类型;而是对接口编程,通过继承,把实现透明化,每增加一个类型就增加一个类。

    想这么一个问题,每增加一个类型的时候,是修改原类添加一个else分支好还是实现一个新的与老代码无关的新类好?

    下面这种实现就是对修改开放的结果,每次要增加一个类型,都得修改原有代码,导致原有系统可能被引入bug,需要被重新测试:

    class Demo {
    
            public static final int TYPE_A = 1;
            public static final int TYPE_B = 2;
            public static final int TYPE_C = 3;
    
    
            public Demo(int type) {
                if(type == 1) {
                    //act as TYPE_A
                }
                if(type == 2) {
                    //act as TYPE_B
                }
                if(type ==3) {
                    //act as TYPE_C
                }
            }
        }

    下面这种情况就是对修改关闭,通过对接口变成对扩张开放,新增一个类型不用修改原有代码:

        interface Type {
    
        }
    
        class Demo2 {
            private Type mType = null;
    
            public Demo2() {
            }
    
            public void setType(Type type) {
                mType = type;//act like what you assigned.
            }
        }
    
        class TypeA implements Type {
    
        }
        

    里氏替换原则

    开闭原则就是通过里氏替换来实现的,即对接口编程,建立抽象,具体的实现在运行时替换掉抽象,所有引用基类的地方必须能透明地使用其子类对象。

    依赖导致原则

    就是调用者(客户代码)不依赖于被调用者(实现代码)的实现细节,而是依赖其抽象。

    调用者不依赖被调用者的具体实现,而是依赖被调用者的抽象,这样被调用者后续可以被无感替换掉;

    接口隔离原则

    接口定义要最小化,就是接口只专注一个领域,不要大而全,要小而细。

    比如Closeable接口只管close,不管其实现类的其他事情,Comparable接口只管比较,不管其他的。

    迪米特原则(least Knowledge Principle)

    就是类与类的少了解,即类只需要知道依赖类必须知道的方法,其余的细节不要去了解;类的“朋友”要少,即类尽可能只跟必须要打交道的有依赖,不要依赖一大堆。

    总结:

    说到底,这些原则就是对面向对象的抽象,封装,多态的灵活运用。

  • 相关阅读:
    Java的异常类的整理
    java中tostring的重载
    java中的引用于c++的指针的相互代替(就以创建简单的栈去讲解)
    Java版单词搜索
    Java/C++的正则表达式的总结归纳
    某个整数的全排列问题
    DFS+单词搜索
    一维数组组合
    离线升级OpenSSH详细步骤 ——安全漏洞修复(实战篇 Centos 6.5/6.10 操作系统)
    Mysql子查询
  • 原文地址:https://www.cnblogs.com/mosthink/p/5305525.html
Copyright © 2011-2022 走看看