1. 开闭准则(Open Closed Principle,OCP):当利用的需要扭转时,在不批改软件实体的源代码或者二进制代码的前提下,能够扩大模块的性能,使其满足新的需要。

  1. 里氏替换准则(Liskov Substitution Principle,LSP):子类能够扩大父类的性能,但不能扭转父类原有的性能。也就是说:子类继承父类时,除增加新的办法实现新增性能外,尽量不要重写父类的办法。

  1. 依赖倒置准则(Dependence Inversion Principle,DIP):高层模块不应该依赖低层模块,两者都应该依赖其形象;形象不应该依赖细节,细节应该依赖形象。其核心思想是:要面向接口编程,不要面向实现编程。

违反依赖倒置准则代码(顾客每更换一家商店,都要批改一次代码,这显著违反了开闭准则。存在以上毛病的起因是:顾客类设计时同具体的商店类绑定了,这违反了依赖倒置准则):

class Customer{    public void shopping(ShaoguanShop shop){        //购物        System.out.println(shop.sell());    }}class Customer{    public void shopping(WuyuanShop shop){        //购物        System.out.println(shop.sell());    }}

批改后的合乎依赖倒置准则代码(定义“婺源网店”和“韶关网店”的独特接口 Shop,顾客类面向该接口编程,其代码批改如下:):

public class DIPtest{    public static void main(String[] args){        Customer wang=new Customer();        System.out.println("顾客购买以下商品:");         wang.shopping(new ShaoguanShop());         wang.shopping(new WuyuanShop());    }}//商店interface Shop{    public String sell(); //卖}//韶关网店class ShaoguanShop implements Shop{    public String sell(){        return "韶关土特产:香菇、木耳……";     } }//婺源网店class WuyuanShop implements Shop{    public String sell(){        return "婺源土特产:绿茶、酒糟鱼……";     }} //顾客class Customer{    public void shopping(Shop shop){        //购物        System.out.println(shop.sell());     }}
  1. 繁多职责准则(Single Responsibility Principle,SRP):繁多职责准则规定一个类应该有且仅有一个引起它变动的起因,否则类应该被拆分

  1. 接口隔离准则(Interface Segregation Principle,ISP):要为各个类建设它们须要的专用接口,而不要试图去建设一个很宏大的接口供所有依赖它的类去调用。

  1. 迪米特法令(Law of Demeter,LoD)又叫作起码常识准则(Least Knowledge Principle,LKP):如果两个软件实体毋庸间接通信,那么就不该当产生间接的互相调用,能够通过第三方转发该调用。其目标是升高类之间的耦合度,进步模块的绝对独立性。迪米特法令中的“敌人”是指:以后对象自身、以后对象的成员对象、以后对象所创立的对象、以后对象的办法参数等,这些对象同以后对象存在关联、聚合或组合关系,能够间接拜访这些对象的办法。

public class LoDtest{    public static void main(String[] args){        Agent agent=new Agent();        agent.setStar(new Star("林心如"));        agent.setFans(new Fans("粉丝韩丞"));        agent.setCompany(new Company("中国传媒有限公司"));        agent.meeting();        agent.business();    }}//经纪人class Agent{    private Star myStar;    private Fans myFans;    private Company myCompany;    public void setStar(Star myStar){        this.myStar=myStar;    }    public void setFans(Fans myFans){        this.myFans=myFans;    }    public void setCompany(Company myCompany){        this.myCompany=myCompany;    }    public void meeting(){        System.out.println(myFans.getName()+"与明星"+myStar.getName()+"见面了。");    }    public void business(){        System.out.println(myCompany.getName()+"与明星"+myStar.getName()+"洽淡业务。");    }}//明星class Star{    private String name;    Star(String name){        this.name=name;    }    public String getName(){        return name;    }}//粉丝class Fans{    private String name;    Fans(String name){        this.name=name;    }    public String getName(){        return name;    }}//媒体公司class Company{    private String name;    Company(String name){        this.name=name;    }    public String getName(){        return name;    }}
  1. 合成复用准则(Composite Reuse Principle,CRP)又叫组合/聚合复用准则(Composition/Aggregate Reuse Principle,CARP):它要求在软件复用时,要尽量先应用组合或者聚合等关联关系来实现,其次才思考应用继承关系来实现。

开闭准则是总纲,它通知咱们要对扩大凋谢,对批改敞开;里氏替换准则通知咱们不要毁坏继承体系;依赖倒置准则通知咱们要面向接口编程;繁多职责准则通知咱们实现类要职责繁多;接口隔离准则通知咱们在设计接口的时候要精简繁多;迪米特法令通知咱们要升高耦合度;合成复用准则通知咱们要优先应用组合或者聚合关系复用,少用继承关系复用。