成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

設計模式6大原則:里氏置換原則

開發 后端
里氏置換原則(Liskov Substitution Principle),簡稱LSP。所有引用基類的地方必須能夠透明的使用其子類對象。也就是說,只要父類出現的地方子類就能夠出現,而且替換為子類不會產生任何錯誤或異常。

里氏置換原則(Liskov Substitution Principle),簡稱LSP

定義:

Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it.

所有引用基類的地方必須能夠透明的使用其子類對象。

也就是說,只要父類出現的地方子類就能夠出現,而且替換為子類不會產生任何錯誤或異常。但是反過來,子類出現的地方,替換為父類就可能出現問題了。

這個原則是為良好的繼承定義一個規范,簡單的講,有4層含義:

一、子類必須完全實現父類的方法

定義一個抽象類

  1. public abstract class ViewPoint {  
  2.     //去麗江旅游  
  3.     public abstract void where();  

下面兩個類是實現這個抽象類

  1. public class Lijiang extends ViewPoint {  
  2.    
  3.     @Override 
  4.     public void where() {  
  5.         System.out.println("歡迎來到麗江...");  
  6.     }  
  7.    
  8. }  
  9.  
  10. public class Zhangjiajie extends ViewPoint {  
  11.    
  12.     @Override 
  13.     public void where() {  
  14.         System.out.println("歡迎來到張家界...");  
  15.     }  
  16.    

人物是涂涂,在里面設置類類型來傳遞參數。此時涂涂要去的旅游景點還是抽象的

  1. public class Tutu {  
  2.     //定義要旅游的景點  
  3.     private ViewPoint viewpoint;  
  4.     //涂涂要去的景點  
  5.     public void setViewPoint(ViewPoint viewpoint)  
  6.     {  
  7.         this.viewpoint = viewpoint;  
  8.     }  
  9.        
  10.     public void travelTo()  
  11.     {  
  12.         System.out.println("涂涂要去旅游了");  
  13.         viewpoint.where();  
  14.     }  

場景類。設置具體要去的景點

  1. public class Sence {  
  2.     public static void main(String args[])  
  3.     {  
  4.         Tutu tutu = new Tutu();  
  5.         //設置要去的旅游景點  
  6.         tutu.setViewPoint(new Lijiang());  
  7.         tutu.travelTo();  
  8.     }  

運行結果:

涂涂要去旅游了
歡迎來到麗江...

二、子類可以有自己的特性

也就是說在類的子類上,可以定義其他的方法或屬性

三、覆蓋或者實現父類的方法時輸入參數可以被放大

父類能夠存在的地方,子類就能存在,并且不會對運行結果有變動。反之則不行。

父類,say()里面的參數是HashMap類型,是Map類型的子類型。(因為子類的范圍應該比父類大)

  1. import java.util.Collection;  
  2. import java.util.HashMap;  
  3.    
  4. public class Father {  
  5.     public Collection say(HashMap map)  
  6.     {  
  7.         System.out.println("父類被執行...");  
  8.         return map.values();  
  9.     }  

子類,say()里面的參數變成了Map類型,Map范圍比HashMap類型大,符合LSP原則。注意這里的say不是覆寫父類的say,因為參數類型不同。而是重載。

  1. import java.util.Collection;  
  2. import java.util.Map;  
  3.    
  4. /*  
  5.  * 子類繼承了父類的所有屬性  
  6.  */ 
  7. public class Son extends Father {  
  8.     //方法輸入參數類型  
  9.     public Collection say(Map map)  
  10.     {  
  11.         System.out.println("子類被執行...");  
  12.         return map.values();  
  13.     }  

場景類

  1. import java.util.HashMap;  
  2.    
  3. public class Home {  
  4.     public static void main(String args[])  
  5.     {  
  6.         invoke();  
  7.     }  
  8.        
  9.     public static void invoke()  
  10.     {  
  11.         //父類存在的地方,子類就應該能夠存在  
  12.         //Father f = new Father();  
  13.         Son s = new Son();  
  14.         HashMap map = new HashMap();  
  15.         //f.say(map);  
  16.         s.say(map);  
  17.     }  

無論是用父類還是子類調用say方法,得到的結果都是

父類被執行...

但是,如果將上面Father里的say參數改為Map,子類Son里的say參數改為HashMap,得到的結果就變成了

f.say(map)結果:父類被執行...

s.say(map)結果: 子類被執行...

這樣會造成邏輯混亂。所以子類中方法的前置條件必須與父類中被覆寫的前置條件相同或者更寬。

四、覆寫或者實現父類的方法時輸出結果可以被縮小

其實與上面的類似,也就是父類能出現的地方子類就可以出現,而且替換為子類不會產生任何錯誤或者異常,使用者也無需知道是父類還是子類。但是反過來就不行了,有子類出現的地方,父類未必就適應。(畢竟子類的范圍要>=父類的范圍)

原文鏈接:http://www.cnblogs.com/loulijun/archive/2012/03/04/2379082.html

【編輯推薦】

  1. JavaScript設計模式之代理模式
  2. 利用 SPL 快速實現 Observer 設計模式
  3. 設計模式系列之代理模式
  4. 從理發店流程抽象設計模式中的組合模式
  5. 大話惱人的那些設計模式
責任編輯:林師授 來源: 婁立軍的博客
相關推薦

2012-03-15 11:15:13

Java設計模式

2012-03-07 10:40:19

Java設計模式

2012-03-07 11:03:13

Java設計模式

2012-03-08 10:57:00

Java設計模式

2012-03-12 16:10:26

Java設計模式

2011-09-07 09:21:01

設計模式

2015-09-23 17:12:18

API設計原則

2015-09-24 08:52:53

API設計原則

2010-05-07 17:59:05

Unix服務器

2021-07-29 14:42:55

設計模式Java

2010-09-09 13:54:06

DIV CSS

2010-03-31 17:26:52

SaaS

2024-10-14 09:52:39

軟件項目開發軟件項目估算

2011-07-19 18:13:15

高效數據庫

2020-09-18 11:25:43

智能

2020-06-09 07:00:00

面向對象編程編程原則

2012-02-01 13:24:37

2010-09-14 13:49:38

CSS代碼

2010-08-16 13:35:21

數據庫設計

2011-06-29 15:44:19

SEO
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品毛片一区二区在线看 | 99久久免费精品国产免费高清 | 欧美精品网站 | 精品伊人 | 久久成人免费 | 中文字幕亚洲一区 | 精品免费视频 | 久久天堂网 | 黄网免费 | 99这里只有精品视频 | 国产日韩欧美一区二区 | 好姑娘高清在线观看电影 | 国产中文在线观看 | av毛片在线播放 | 国产在线精品一区二区 | 久久久久一区二区 | 黄色一级电影免费观看 | 国产 欧美 日韩 一区 | 午夜丰满少妇一级毛片 | 日韩成人av在线播放 | 超碰综合 | 91一区二区 | 婷婷五月色综合香五月 | 日韩av成人| 色综合区| 毛片免费观看 | 黑人巨大精品欧美一区二区免费 | 久久综合香蕉 | 久久久久久免费免费 | 国产欧美在线观看 | 成人av免费在线观看 | 精品日本久久久久久久久久 | 日韩欧美黄色 | 亚洲高清中文字幕 | 欧美激情国产日韩精品一区18 | 亚洲精品电影 | 黄色欧美视频 | 日韩有码在线观看 | 日韩av中文 | 欧美一区二区三区久久精品 | 日韩黄色小视频 |