<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                [TOC] ## 策略模式 優點: 1. 提供了對"開閉原則"的完美支持 2. 避免使用多條件的轉移語句 3. 提供了管理相關算法族的辦法 缺點: 1. 客戶端必須知道所有的策略類 2. 策略模式將造成產生很多策略類 適合場景: 1. 需要動態地在幾種算法中選擇一種 2. 多個類區別僅在于它們的行為或算法不同的場景 ### 簡單demo <details> <summary>main.go</summary> ``` package main import "log" // 實現一個上下文的類 type Context struct { Strategy } // 抽象的策略 type Strategy interface { Do() } type Strategy1 struct { } func (s *Strategy1) Do() { log.Printf("%v","實現策略1") } type Strategy2 struct { } func (s *Strategy2) Do() { log.Printf("%v","實現策略2") } func main() { context := Context{} context.Strategy=&Strategy1{} context.Do() strategy2 :=&Strategy2{} context.Strategy=strategy2 context.Do() /** 2020/05/12 07:29:56 實現策略1 2020/05/12 07:29:56 實現策略2 */ } ``` </details> <br /> ### 實戰模擬 實現一個日志記錄器滿足:文件記錄和數據庫記錄2種方式 <details> <summary>詳情</summary> ``` package main import "log" type LogManager struct { Logging } func NewLogManager(logging Logging) *LogManager { return &LogManager{Logging: logging} } type Logging interface { Info() Error() } type FileLogging struct{ } func (f *FileLogging) Info() { log.Printf("%v","文件記錄 info") } func (f *FileLogging) Error() { log.Printf("%v","文件記錄 Error") } type DbLogging struct{ } func (f *DbLogging) Info() { log.Printf("%v","數據庫記錄 info") } func (f *DbLogging) Error() { log.Printf("%v","數據庫記錄 Error") } func main() { filelog := &FileLogging{} manager := NewLogManager(filelog) manager.Info() manager.Error() dblog:=&DbLogging{} manager.Logging=dblog manager.Info() manager.Error() } ``` </details> <br /> ### 遍歷策略模式 <details> <summary>main.go</summary> ``` package main import "log" type LogManager struct { Log []Logging } func NewLogManager(logging ...Logging) *LogManager { return &LogManager{ Log: logging, } } func (l *LogManager) Info() { for _, logging := range l.Log { logging.Info() } } func (l *LogManager) Error() { for _, logging := range l.Log { logging.Error() } } type Logging interface { Info() Error() } type FileLogging struct{ } func (f *FileLogging) Info() { log.Printf("%v","文件記錄 info") } func (f *FileLogging) Error() { log.Printf("%v","文件記錄 Error") } type DbLogging struct{ } func (f *DbLogging) Info() { log.Printf("%v","數據庫記錄 info") } func (f *DbLogging) Error() { log.Printf("%v","數據庫記錄 Error") } func main() { filelog := &FileLogging{} dblog:=&DbLogging{} manager := NewLogManager(filelog,dblog) manager.Info() manager.Error() } ``` </details> <br />
                  <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>

                              哎呀哎呀视频在线观看