<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## 英文名稱:Open Closed Principle,OCP **定義**:一個軟件實體如類、模塊和函數應該對擴展開發,對修改關閉。 **大意**:一個軟件實體應該通過擴展來實現變化,而不是通過修改已有的代碼來實現變化。 開閉原則就是java世界里最基礎的設計原則。 軟件實體包括: * 項目或軟件產品中按照一定的邏輯規則劃分的模塊 * 抽象和類 * 方法 **一個實例**: * IBook定義了數據的三個屬性:名稱,作者,價格 * BookStore是書店 * NovelBook是一個具體的實現類 ![](https://box.kancloud.cn/2016-06-06_575534079dc9e.jpg) ~~~ public class BookStore { public static List<NovelBooks> listBooks = new ArrayList<NovelBooks>(); static{ listBooks.add(new NovelBooks("三重門","韓寒",3000)); listBooks.add(new NovelBooks("人生","路遙",2400)); listBooks.add(new NovelBooks("荊棘鳥","考琳·麥卡洛",5000)); listBooks.add(new NovelBooks("從你的全世界路過","張嘉佳",2500)); } public static void main(String[] args) { //返回默認的貨幣格式 NumberFormat formatter = NumberFormat.getCurrencyInstance(); for(NovelBooks book: listBooks){ System.out.println("書籍名稱:"+book.getName()+"\t書籍作者:"+book.getAuthor()+"\t書籍價格:"+ formatter.format(book.getPrice()/100.0)+"元"); } } } interface IBook{ public String getName(); public String getAuthor(); public int getPrice(); } class NovelBooks implements IBook{ private int price; private String name; private String author; public NovelBooks(String name,String author,int price) { this.author = author; this.price =price; this.name = name; } @Override public String getName() { // TODO Auto-generated method stub return this.name; } @Override public String getAuthor() { // TODO Auto-generated method stub return this.author; } @Override public int getPrice() { // TODO Auto-generated method stub return this.price; } } ~~~ **需求更改**: 當書店推出打折暢銷,來獲取更多的購買量。書店規定40元以下的書籍8折出售,50元以上的數據9折出售。 那么如果在NovelBooks類中修改getPrice方法就會導致代碼修改量變大。 解決方案: 通過擴展實現變化。 遵守開閉原則,對軟件實體進行擴展來達到改變需求的目的,而不是修改已經存在的代碼。 定義一個打折類offNovelBooks繼承自NovelBooks,覆寫getPrice方法 ![](https://box.kancloud.cn/2016-06-06_57553407b46f3.jpg) ~~~ public class BookStore { public static List<NovelBooks> listBooks = new ArrayList<NovelBooks>(); static{ listBooks.add(new OffNovelBooks("三重門","韓寒",3000)); listBooks.add(new OffNovelBooks("人生","路遙",2400)); listBooks.add(new OffNovelBooks("荊棘鳥","考琳·麥卡洛",5000)); listBooks.add(new OffNovelBooks("從你的全世界路過","張嘉佳",2500)); } public static void main(String[] args) { //返回默認的貨幣格式 NumberFormat formatter = NumberFormat.getCurrencyInstance(); for(NovelBooks book: listBooks){ System.out.println("書籍名稱:"+book.getName()+"\t書籍作者:"+book.getAuthor()+"\t書籍價格:"+ formatter.format(book.getPrice()/100.0)+"元"); } } } interface IBook{ public String getName(); public String getAuthor(); public int getPrice(); } class NovelBooks implements IBook{ private int price; private String name; private String author; public NovelBooks(String name,String author,int price) { this.author = author; this.price =price; this.name = name; } @Override public String getName() { // TODO Auto-generated method stub return this.name; } @Override public String getAuthor() { // TODO Auto-generated method stub return this.author; } @Override public int getPrice() { // TODO Auto-generated method stub return this.price; } } class OffNovelBooks extends NovelBooks{ public OffNovelBooks(String name, String author, int price) { super(name, author, price); // TODO Auto-generated constructor stub } @Override public int getPrice() { int rePrice = super.getPrice(); int nowPrice = 0; if(rePrice>4000){ nowPrice = rePrice*80/100; }else{ nowPrice = rePrice*90/100; } return nowPrice; } } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看