zoukankan      html  css  js  c++  java
  • JavaSE:常用的设计原则

    1.  软件开发的流程

        需求文档分析,概要设计文档,详细设计文档,编码和测试,安装和调试,维护和升级

    2.  常用的设计原则

        <1>  开闭原则 (Open Close Principle)

              对扩展开放,对修改关闭,为了使程序的扩展性好,易于维护和升级

              代码示例:     

    public abstract class Person {
        private String name;
        //private int age;    客户新增需求: 添加年龄 (将代码直接添加在Person.java中的缺点: "牵一发而动全身")
    // 建议: <1> 尽量不要修改 (对修改关闭)
       // <2> 对拓展开放 (见SubPerson.java)
    public Person() { } public Person(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } public abstract void show(); }

    运用开闭原则 (Open Close Principle):  

    public class SubPerson extends Person {
        private int age;
    
        @Override
        public void show() {
    
        }
    }

        <2>  里氏代换原则 (Liskov Substitution Principle)

              任何基类(父类)可以出现的地方,子类一定可以出现,多使用多态(父类的引用指向子类的对象)的方式

        <3>  依赖倒转原则 (Dependence Inversion Principle)

              尽量多依赖于抽象类或接口,而不是具体实现类。

              原因:抽象类 / 接口 对子类具有强制性和规范性

              例子:

    public abstract class Person {
        private String name;
    
        public Person() {
        }
    
        public Person(String name) {
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public abstract void show();
    }
    public class SubPerson extends Person {
        private int age;
    
       // 必须重写抽象方法,或者将类声明为抽象类
    // 体现了强制性和规范性
    @Override
    public void show() { } }

        <4>  接口隔离原则 (Interface Segregation Principle)

              尽量多使用小接口,而不是大接口,避免接口的污染,降低类之间耦合(关联)度

                例子:

    public interface Animal {
    
        void run(); // 用于描述奔跑行为的抽象方法
        void fly(); // 用于描述飞行行为的抽象方法
    }
    public class Dog implements {
        @Override
        public void run() {
    
        }

       // 不足: Dog.java 需要重写Animal接口中的所有抽象方法,包括 fly() 方法
      
        
        @Override
        public void run() {
    
        }

      // 改进: 需要使用小接口 (RunAnimal)    
    }

    ====================================================================================================================
    // 小接口一
    public interface RunAnimal {
    
        void run(); // 用于描述奔跑行为的抽象方法
    }
    // 小接口二
    public interface FlyAnimal {
    
        void fly(); // 用于描述飞行行为的抽象方法
    }
    // 使用小接口
    public class Dog implements RunAnimal {
        @Override
        public void run() {
    
        }
    }

        <5>  迪米特法则(最少知道原则) (Demeter Principle)

              一个实体,应当尽量少与其他实体之间发生相互作用,使系统功能模块相对独立

              高内聚(聚集于该实体的内部),低耦合(关联度)

              比如: 一个Java讲师,应该高度聚集Java的技术,而降低与行政工作的关联度

                                                    (高耦合:一个既修水龙头,又讲Java的讲师)

        <6>  合成复用原则 (Composite Reuse Principle)

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

              代码:

     public class A {
     
         public void show() {
             System.out.println("这是A类中的show方法!");
         }
     }
    public class B/* <2> 方法一,继承:extends A*/ {
       // <2> 使用继承的缺点: Java中只支持单继承

    // <3> 方法二: 合成复用原则

    // 1. 声明一个其他类类型的引用,作为这个类的成员变量
    private A a;

    // 2. 通过构造方法,初始化这个成员变量
    public B(A a) { this.a = a; }
    public void test() { // <1> 调用A类中的show方法,请问如何实现? a.show(); } }

               

  • 相关阅读:
    sleep() 和 wait() 区别是什么?
    JAVA面试中需要准备的点
    javascript 取掉空格自定义函数
    code manager tools myeclipse10 svn插件安装及使用
    javascript 常用兼容fire fox的解决办法
    javascript 获取标签内的内容
    javascript dom与字符串相互转换
    javascript window.showModalDialog不兼容goole解决方案
    javascript js获取url及url参数解析
    javascript table排序之jquery.tablesorter.js
  • 原文地址:https://www.cnblogs.com/JasperZhao/p/14944399.html
Copyright © 2011-2022 走看看