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 }