自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

設(shè)計模式6大原則:開閉原則

開發(fā) 后端
開閉原則算是前5中原則的一個抽象總結(jié),前五種是開閉原則的一些具體實現(xiàn),所以如果使用開閉原則,其實有點虛,因為它沒有一個固定的模式,但是最終保證的是提高程序的復(fù)用性、可維護性等要求。

開閉原則(Open Closed Principle)

開閉原則的核心是:對擴展開放,對修改關(guān)閉。

白話意思就是我們改變一個軟件時(比如擴展其他功能),應(yīng)該通過擴展的方式來達到軟件的改變,而不應(yīng)愛修改原有代碼來實現(xiàn)變化。

開閉原則算是前5中原則的一個抽象總結(jié),前五種是開閉原則的一些具體實現(xiàn),所以如果使用開閉原則,其實有點虛,因為它沒有一個固定的模式,但是最終保證的是提高程序的復(fù)用性、可維護性等要求。

要使用這一原則還需要結(jié)合著它的思想“對擴展開放,對修改關(guān)閉”與其他的五大設(shè)計原則根據(jù)經(jīng)驗來開發(fā)項目。

大體是這個意思,如果想深究,還需要看看其他的書籍。

下面是使用開閉原則的一個簡單示例,雖有些不準(zhǔn)確,但是是這個意思(領(lǐng)會精神)。

定義一個接口,尋找美女

  1. package com.loulijun.chapter6;  
  2.    
  3. public interface IFindGirl {  
  4.     //年齡  
  5.     public int getAge();  
  6.     //姓名  
  7.     public String getName();  
  8.     //長相  
  9.     public String getFace();  
  10.     //身材  
  11.     public String getFigure();  

實現(xiàn)這個接口

  1. package com.loulijun.chapter6;  
  2.    
  3. public class FindGirl implements IFindGirl {  
  4.     private String name;  
  5.     private int age;  
  6.     private String face;  
  7.     private String figure;  
  8.        
  9.     public FindGirl(String name, int age, String face, String figure)  
  10.     {  
  11.         this.name = name;  
  12.         this.age = age;  
  13.         this.face = face;  
  14.         this.figure = figure;  
  15.     }  
  16.    
  17.     @Override 
  18.     public int getAge() {  
  19.         return age;  
  20.     }  
  21.    
  22.     @Override 
  23.     public String getFace() {  
  24.         return face;  
  25.     }  
  26.    
  27.     @Override 
  28.     public String getFigure() {  
  29.         return figure;  
  30.     }  
  31.    
  32.     @Override 
  33.     public String getName() {  
  34.         return name;  
  35.     }  
  36.        
  37.    

場景:大街上

  1. package com.loulijun.chapter6;  
  2.    
  3. import java.text.NumberFormat;  
  4. import java.util.ArrayList;  
  5.    
  6. public class Street {  
  7.     private final static ArrayList<IFindGirl> girls = new ArrayList<IFindGirl>();  
  8.     //靜態(tài)初始化塊  
  9.     static 
  10.     {  
  11.         girls.add(new FindGirl("張含韻",23,"可愛型","165cm/47kg"));  
  12.         girls.add(new FindGirl("高圓圓",33,"時尚型","165cm/48kg"));  
  13.         girls.add(new FindGirl("章澤天",19,"清純型","168cm/47kg"));  
  14.     }  
  15.     public static void main(String args[])  
  16.     {  
  17.         System.out.println("----------美女在這里----------");  
  18.         for(IFindGirl girl:girls)  
  19.         {  
  20.             System.out.println("姓名:"+girl.getName()+" 年齡:"+girl.getAge()+  
  21.                     "  長相:"+girl.getFace()+"  身材:"+girl.getFigure());  
  22.         }  
  23.     }  

運行結(jié)果:

----------美女在這里----------

姓名:張含韻 年齡:23 長相:可愛型 身材:165cm/47kg
姓名:高圓圓 年齡:33 長相:時尚型 身材:165cm/48kg
姓名:章澤天 年齡:19 長相:清純型 身材:168cm/47kg

但是如果想獨立分出一個外國美女的類別的話(比如增加一個國籍),可以通過修改接口、修改實現(xiàn)類、通過擴展來實現(xiàn)。

如果修改接口,也就意味著修改實現(xiàn)類,這樣對項目的變動太大了,所以不推薦

如果修改實現(xiàn)類,這樣雖能解決問題,但是明顯有些牽強,如果需要其他變動的時候會顯得邏輯混亂

所以,通過擴展來實現(xiàn)是最簡單的方式

如何擴展:

可以定義一個IForeigner接口繼承自IFindGirl,在IForeigner接口中添加國籍屬性getCountry(),然后實現(xiàn)這個接口即可,然后就只需要在場景類中做稍微修改就可以了

  1. package com.loulijun.chapter6;  
  2.    
  3. public interface IForeigner extends IFindGirl {  
  4.     //國籍  
  5.     public String getCountry();  

實現(xiàn)接口

  1. package com.loulijun.chapter6;  
  2.    
  3. public class ForeignerGirl implements IForeigner {  
  4.     private String name;  
  5.     private int age;  
  6.     private String country;  
  7.     private String face;  
  8.     private String figure;  
  9.        
  10.     public ForeignerGirl(String name, int age, String country, String face, String figure)  
  11.     {  
  12.         this.name = name;  
  13.         this.age = age;  
  14.         this.country = country;  
  15.         this.face =face;  
  16.         this.figure = figure;  
  17.     }  
  18.     @Override 
  19.     public String getCountry() {  
  20.         // TODO Auto-generated method stub  
  21.         return country;  
  22.     }  
  23.    
  24.     @Override 
  25.     public int getAge() {  
  26.         // TODO Auto-generated method stub  
  27.         return age;  
  28.     }  
  29.    
  30.     @Override 
  31.     public String getFace() {  
  32.         // TODO Auto-generated method stub  
  33.         return face;  
  34.     }  
  35.    
  36.     @Override 
  37.     public String getFigure() {  
  38.         // TODO Auto-generated method stub  
  39.         return figure;  
  40.     }  
  41.    
  42.     @Override 
  43.     public String getName() {  
  44.         // TODO Auto-generated method stub  
  45.         return name;  
  46.     }  
  47.    

然后在場景類中只需要修改如下代碼即可,其他不變

  1. girls.add(new ForeignerGirl("Avirl",28,"美國","性感型","160cm/45kg")); 

不過這些設(shè)計原則到不是絕對的,而是根據(jù)項目需求,實際需求來定奪使用。

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

【編輯推薦】

  1. 設(shè)計模式6大原則:迪米特法則
  2. 設(shè)計模式6大原則:接口隔離原則
  3. 設(shè)計模式6大原則:依賴倒置原則
  4. 設(shè)計模式6大原則:里氏置換原則
  5. 設(shè)計模式6大原則:單一職責(zé)原則
責(zé)任編輯:林師授 來源: 婁立軍的博客
相關(guān)推薦

2012-03-07 11:03:13

Java設(shè)計模式

2012-03-07 10:40:19

Java設(shè)計模式

2012-03-05 13:58:34

設(shè)計模式里氏置換

2012-03-08 10:57:00

Java設(shè)計模式

2012-03-12 16:10:26

Java設(shè)計模式

2011-09-07 09:21:01

設(shè)計模式

2015-09-24 08:52:53

API設(shè)計原則

2015-09-23 17:12:18

API設(shè)計原則

2010-05-07 17:59:05

Unix服務(wù)器

2021-07-29 14:42:55

設(shè)計模式Java

2010-09-09 13:54:06

DIV CSS

2024-10-14 09:52:39

軟件項目開發(fā)軟件項目估算

2010-03-31 17:26:52

SaaS

2011-07-19 18:13:15

高效數(shù)據(jù)庫

2020-09-18 11:25:43

智能

2010-09-14 13:49:38

CSS代碼

2012-02-01 13:24:37

2010-08-16 13:35:21

數(shù)據(jù)庫設(shè)計

2020-06-09 07:00:00

面向?qū)ο?/a>編程編程原則

2011-09-15 13:05:26

點贊
收藏

51CTO技術(shù)棧公眾號