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(); } }

 

           

posted @ 2021-06-28 14:37  Jasper2003  阅读(36)  评论(0编辑  收藏  举报