乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Java設計模式之002--策略模式

       Coder編程 2021-07-11

      策略模式Strategy Pattern) :定義了一系列的算法, 將每一種算法封裝起來并可以相互替換使用, 策略模式讓算法獨立于使用它的客戶應用而獨立變化。 

      OO設計原則:

      1.面向接口編程(面向抽象編程);

      2.封裝變化;

      3.多用組合, 少用繼承 ;

       

      當一個功能有多種實現(xiàn)方式時, 我們應該使用策略設計模式, 把功能抽象出來, 然后用不同的子類各自提供實現(xiàn)類, 在真正使用時, 根據(jù)業(yè)務情況來動態(tài)替換 

      把可變的行為抽象出來, 這樣的好處是這些行為可以在真正使用時相互替換。

       

      策略模式的實際應用:

      1.數(shù)據(jù)庫操作封裝;

      2.微信掃碼登錄注冊綁定操作 ;

      舉例說明:將數(shù)據(jù)保存到不同的地方,比如文件、網(wǎng)絡、數(shù)據(jù)庫中。

      a.創(chuàng)建接口,以供不同方式去實現(xiàn)

      public interface ISave {
      public void save(String data);
      }

      b.以供不同方式去實現(xiàn)接口中的方法

      public class FileSave implements ISave{
      @Override
      public void save(String data){
      System.out.println("把數(shù)據(jù)["+data+"]存儲到文件中");
      }
      }
      public class DBSave implements ISave{
      @Override
      public void save(String data) {
      System.out.println("把數(shù)據(jù)["+data+"]存儲到數(shù)據(jù)庫中");
      }
      }

      public class NetSave implements ISave{
          @Override
      public void save(String data) {
      System.out.println("把數(shù)據(jù)["+data+"]存儲到網(wǎng)絡中");
      }
      }

      c.通過類來組合接口和接口的實現(xiàn)類,自上而下地調(diào)用具體不同對象的相同方法,來實現(xiàn)多態(tài)性

      public class DataContext {
      private ISave iSave; //DataContext只依賴接口,不依賴具體的實現(xiàn)---->面向接口編程

      public DataContext(ISave iSave){
      this.iSave = iSave;
      }

      public void save1(String data){
      iSave.save(data);  //通過接口來調(diào)用具體對象的sava方法(父類調(diào)子類方法原理)
      }
      }

      測試對比:

      public class Test {
      public static void main(String[] args) throws Exception{
      //1 依賴了具體類
      //1 ISave iSave = new FileSave();
      //1 iSave.save("苦戰(zhàn)Java一輩子?。?);

      //2 依賴接口(抽象類),具體的對象創(chuàng)建還要通過代碼來改動
      //2 DataContext dc = new DataContext(new FileSave());
      //2 dc.save1("苦戰(zhàn)Java一輩子!!");

      //3 依賴接口(抽象類),具體的對象類脫離到屬性文件中(config.properties),而不是放在代碼中
      //讓軟件更加利于維護(提高程序的可擴張性),犧牲性能
      Properties prop = new Properties(); //屬性文件工具類
      prop.load(Thread.currentThread().getContextClassLoader()
      .getResourceAsStream("config.properties"));
      //屬性文件中(config.properties): context.save=NetSave
      String className = prop.getProperty("context.save");
      ISave iSave = (ISave) Class.forName(className).newInstance();

      DataContext dc = new DataContext(iSave);
      dc.save1("苦戰(zhàn)Java一輩子?。?);
      }
      }


       

        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多