1開放封閉原則OCP

1、什麼是開放封閉原則架構

  開放封閉原則(Open-Closed Principle):一個軟件實體 應當對擴展開放,則修改關閉。測試

  在設計一個模塊時,應當使得這個模塊能夠在不被修 改的前提下被擴展。也就是說,應當能夠在沒必要修改源 代碼的狀況下修改這個模塊的行爲。spa

  設計的目的便在於面對需求的改變而保持系統的相對 穩定,從而使得系統能夠很容易的從一個版本升級到另 一個版本。設計

 

2、怎樣作到開放封閉原則code

  實際上,絕對封閉的系統是不存在的。不管模塊是怎 麼封閉,到最後,總仍是有一些沒法封閉的變化。而我 們的思路就是:既然不能作到徹底封閉,那咱們就應該 對那些變化封閉,那些變化隔離作出選擇。咱們作出選 擇,而後將那些沒法封閉的變化抽象出來,進行隔離, 容許擴展,儘量的減小系統的開發。當系統變化來臨 時,咱們要及時的作出反應。blog

  咱們並不懼怕改變的到來。當變化到來時,咱們首 先須要作的不是修改代碼,而是儘量的將變化抽象出 來進行隔離,而後進行擴展。面對需求的變化,對程序 的修改應該是儘量經過添加代碼來實現,而不是經過 修改代碼來實現。接口

  實際上,變化或者可能的變化來的越早,抽 象就越容易,相對的,代碼的維護也就越容易; 而當項目接近於完成而來的需求變化,則會使抽 象變得很困難——這個困難,並非抽象自己的 困難,抽象自己並無困難,困難在於系統的架構已經完成,修改牽扯的方面太多而使得抽象 工做變得很困難。ip

 

3、繁忙的銀行業務員ci

 

4、輕鬆的銀行業務員開發

 

3、開放封閉原則的優越性

  1.經過擴展已有的軟件系統,能夠提供新的行 爲,以知足對軟件的新需求,是變化中的軟件有 必定的適應性和靈活性。

  2.已有的軟件模塊,特別是最重要的抽象模 塊不能再修改,這就使變化中的軟件系統有必定 的穩定性和延續性。

 

沒使用開關封閉集合

 1 //銀行業務員
 2 public class BankWorker {
 3     //負責存款業務
 4     public void saving() {
 5         System.out.println("進行存款操做");
 6     }
 7     
 8     //負責取款業務
 9     public void drawing() {
10         System.out.println("進行取款操做");
11     }
12     
13     //負責轉帳業務
14     public void zhuanzhang() {
15         System.out.println("進行轉帳操做");
16     }
17     
18     //負責基金的申購
19     public void jijin() {
20         System.out.println("進行基金申購操做");
21     }
22 }

測試

 1 public class MainClass {
 2     public static void main(String[] args) {
 3         BankWorker bankWorker = new BankWorker();
 4         //存款
 5         bankWorker.saving();
 6         
 7         //取款
 8         bankWorker.drawing();
 9         
10         //轉帳
11         bankWorker.zhuanzhang();
12         
13         //基金
14         bankWorker.jijin();
15     }
16 }

 

=================================================================

銀行業務員接口,是全部銀行業務員的抽象父類

 1 public class MainClass {
 2     public static void main(String[] args) {
 3         BankWorker bankWorker = new BankWorker();
 4         //存款
 5         bankWorker.saving();
 6         
 7         //取款
 8         bankWorker.drawing();
 9         
10         //轉帳
11         bankWorker.zhuanzhang();
12         
13         //基金
14         bankWorker.jijin();
15     }
16 }

負責取款業務的業務員

1 //負責取款業務的業務員
2 public class DrawingBankWorker  implements BankWorker{
3 
4     public void operation() {
5         System.out.println("進行取款操做");
6     }    
7 }

辦基金

1 //辦基金
2 public class JiJinBankWorker implements BankWorker {
3 
4     public void operation() {
5         System.out.println("進行基金申購操做");
6     }
7 }

負責存款業務的業務員

1 //負責存款業務的業務員
2 public class SavingBankWorker implements BankWorker {
3 
4     public void operation() {
5         System.out.println("進行存款操做");
6     }
7 }

負責轉帳業務的業務員

1 //負責轉帳業務的業務員
2 public class ZhuanZhangBankWorker implements BankWorker {
3 
4     public void operation() {
5         System.out.println("進行轉帳操做");
6     }
7 }

測試

 1 public class MainClass {
 2     public static void main(String[] args) {
 3         BankWorker bankWorker = new SavingBankWorker();
 4         bankWorker.operation();
 5         
 6         BankWorker bankWorker2 = new DrawingBankWorker();
 7         bankWorker2.operation();
 8         
 9         BankWorker bankWorker3 = new ZhuanZhangBankWorker();
10         bankWorker3.operation();
11         
12         BankWorker bankWorker4 = new JiJinBankWorker();
13         bankWorker4.operation();
14     }
15 }
相關文章
相關標籤/搜索