设计模式中的6大准则

一、里氏替换原则

我们知道Java的三大特性:封装,继承,多态。Java 继承有很多优点,是减少重复代码的可靠手段。
但是继承同时存在一些缺点:

  1. 类的耦合性增加了。比如父类更改之后子类也同时需要更改
  2. 降低代码灵活性。因为继承时,父类会对子类有约束性
    我们使用里氏替换原则,可以减少继承带来的问题。
  定义:
  里氏替换原则(LSP)指的是所有引用基类的地方都可以透明的使用其子类的对象,可以理解为:只要有父类出现的地方,都可以使用子类来替代。而且不会出现任何错误或者异常。但是反过来却不行。子类出现的地方,不能使用父类来替代。
  具体约束:
  1.子类必须实现父类的抽象方法,但不得重写父类的非抽象(已实现的)方法。
  2.子类中可增加自己特有的方法。(可以随时扩展)
  3.当子类覆盖或者实现父类的方法时,方法的前置条件(方法形参)要比父类输入参数更加宽松(父类HashMap,子类Map)。否则会调用到父类的方法。
  4.当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格(父类Map,子类HashMap)。否则会调用到父类的方法。
 
二、依赖倒置原则:要面向接口编程,不要面向实现编程。
  依赖倒置原则的目的是通过要面向接口的编程来降低类间的耦合性,满足下列四点:
  1. 每个类尽量提供接口或抽象类,或者两者都具备。
  2. 变量的声明类型尽量是接口或者是抽象类。
  3. 任何类都不应该从具体类派生。
  4. 使用继承时尽量遵循里氏替换原则。

 

 1 //商店
 2 interface Shop{
 3     public String sell(); //
 4 }
 5 //韶关网店
 6 class ShaoguanShop implements Shop{
 7     public String sell(){
 8         return "韶关土特产:香菇、木耳……"; 
 9     } 
10 }
11 //婺源网店
12 class WuyuanShop implements Shop{
13     public String sell(){
14         return "婺源土特产:绿茶、酒糟鱼……"; 
15     }
16 } 
17 //顾客
18 class Customer{
19     public void shopping(Shop shop){
20         //购物
21         System.out.println(shop.sell()); 
22     }
23 }
24 public class DIPtest{
25     public static void main(String[] args){
26         Customer wang=new Customer();
27         System.out.println("顾客购买以下商品:"); 
28         wang.shopping(new ShaoguanShop()); 
29         wang.shopping(new WuyuanShop());
30     }
31 }
View Code

 

 

posted on 2020-03-12 21:40  hdc520  阅读(520)  评论(0编辑  收藏  举报

导航