1. 程式人生 > >設計模式| Strategy pattern

設計模式| Strategy pattern

OO設計原則

  1. 封裝變化
  2. 針對介面程式設計,而不是針對實現程式設計
  3. 多用組合,少用繼承

《head first 設計模式》思路

初始需求:設計日誌SDK,支援多種列印方式:檔案日誌/標準輸出列印/socket日誌(想象有幾十個子類),設定多種日誌格式

  1. 繼承,抽象Super Class
  • 定義日誌超類(superclass),因為每種appender列印方式不同,print() 方法是抽象的。

需求2: 增加一個新功能,設定標準輸出日誌顏色
2. 覆蓋繼承過來,卻不需要的方法(檔案日誌不需要)

  • 問題:setColor() 方法加入到超類不合適,子類需要覆蓋,比較笨
  1. 介面化,設定顏色定義為介面,子類按需implement
  • 問題:存量類都需要修改,程式碼會變多
  1. 設計原則1,抽離容易改變的
  • 容易改變,例如設定日誌格式
  1. 設計原則2,面向介面程式設計,而不是面向物件。宣告的物件不要限定型別。
  • 顏色介面,定義具體的實現類。後面可以無限增加實現類,即不會影響存量的行為類,也不會影響使用者的日誌類。

原文的圖片如下,原文以設計duck應用為例
原文策略模式圖片
問題:如何動態改變日誌類的某個行為,例如同步列印/非同步阻塞列印/非同步非阻塞列印

  1. 增加同步/非同步介面,增加一些實現類,然後超類中,增加設定同步非同步方式的方法
  • 子類例項,可以在執行時呼叫set方法,來實現動態改變行為

總結

策略模式-定義演算法族,分別封裝,使得演算法實現和使用演算法的客戶端分離

相關推薦

設計模式| Strategy pattern

OO設計原則 封裝變化 針對介面程式設計,而不是針對實現程式設計 多用組合,少用繼承 《head first 設計模式》思路 初始需求:設計日誌SDK,支援多種列印方式:檔案日誌/標準輸出列印/so

【java設計模式】【行為模式Behavioral Pattern】策略模式Strategy Pattern

java sys algorithm stat 設計模式 log sets ace 行為模式 1 package com.tn.策略模式; 2 3 public class Client { 4 private Strategy strategy; 5

用心理解設計模式——策略模式 (Strategy Pattern)

前置文章: 用心理解設計模式——設計模式的原則  設計模式相關程式碼已統一放至 我的 Github   一、定義   行為型模式之一。    Define a family of algorithms, enc

設計模式(一):“穿越火線”中的“策略模式”(Strategy Pattern)

在前段時間呢陸陸續續的更新了一系列關於重構的文章。在重構我們既有的程式碼時,往往會用到設計模式。在之前重構系列的部落格中,我們在重構時用到了“工廠模式”、“策略模式”、“狀態模式”等。當然在重構時,有的地方沒有點明使用的是那種設計模式。從今天開始,我們就圍繞著設計模式這個主題來討論一下我們常用的設計模式,當然

Java開發之設計模式--策略模式(Strategy Pattern)

模擬場景: 劉備要到江東娶老婆了,走之前諸葛亮給趙雲(伴郎)三個錦囊妙計,說是按天機拆開解決棘手問題,嘿,還別說,真是解決了大問題,搞到最後是周瑜陪了夫人又折兵呀,那咱們先看看這個場景是什麼樣子的。 先說這個場景中的要素:三個妙計,一個錦囊,一

設計模式最簡Demo:策略模式[Strategy Pattern]

1. 程式需求 在軟體開發中也常常遇到類似的情況,實現某一個功能有多種演算法或者策略,我們可以根據環境或者條件的不同選擇不同的演算法或者策略來完成該功能。在旅行系統開發中,我們需要為旅行者準備自行車、開車、火車等不同的策略,旅行者可以根據自身情況選擇不同策略。

C#策略模式(Strategy Pattern)實例教程

奇葩 orm 需要 策略 lin pub 遊戲實例 客戶端 使用 本文以一個簡單的實例來說明C#策略模式的實現方法,分享給大家供大家參考。具體實現方法如下: 一般來說,當一個動作有多種實現方法,在實際使用時,需要根據不同情況選擇某個方法執行動作,就可以考慮使用策略模式。

圖解設計模式-Strategy模式

關聯關系 部分 執行 關聯 stat urn tint 需要 static Strategy(算法)模式可以整體的替換算法的實現部分。 重點說明: 使用委托這種弱關聯關系可以很方便的整體替換算法。 角色: Strategy策略:該角色負責決定實現策略所需要的接口ap

設計模式(Design pattern):簡單&粗暴解析

1.前言 Java是面向物件的程式設計,通常都會涉及到 建立物件、物件組成或依賴、物件間互動 的相關操作,一旦在這些操作中沒有合理進行設計,就會引發專案程式碼 耦合度高、靈活性低、無重用、維護困難、擴充套件成本高、可讀性低。 設計模式 就是通過 不同模式(即不同編寫程

java設計模式--strategy 策略模式

  Strategy 策略模式 策略模式屬於物件的行為模式。其用意是針對一組演算法,將每一個演算法封裝到具有共同介面的獨立的類中,從而使得它們可以相互替換。策略模式使得演算法可以在不影響到客戶端的情況下發生變化。     策略模式的結構   策略

設計模式Proxy Pattern升級aop

AOP底層,就是採用動態代理模式實現的。本文通過aop實現對dao層執行時間進行增強,打印出sql方法執行時間,可以對執行慢sql進行排查優化。 1 切面類 package com.ultrapower

sincerit 策略模式(Strategy Pattern)

當我們在外面旅遊時會根據實際實際情況來選擇一種最合適的出行方式,在定製旅行計劃時,如果目的地較遠,時間不多,不差錢,可以選擇坐飛機去旅遊;如果目的地雖然較遠,但假期長且需要控制旅遊成本可以選擇做火車或汽車。在軟體開發中,也常常遇到類似的選擇的情況,實現某一個功能有多種方法,每種方法對應一種演

策略模式(Strategy Pattern)

是什麼? 怎麼用? 在什麼情況下用? 例子!     策略模式:   物件有某個行為,但在不同的場景下,改行為有不同的實現演算法。   比如:     每個人都要交「個人所得稅」,但「在美國交的個人所得稅」和「在中國交的個人所得稅」有不同的演算法。   再比如:

設計模式—Factory Pattern

下面是點披薩系統中的一段程式碼: Pizza orderPizza(){ Pizza pizza = new Pizza(); pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return

java設計模式之工廠設計模式——Factory Pattern

工廠模式 工廠模式(Factory Pattern)是java中最常見的設計模式之一,該型別屬於建立型設計模式,它提供了一種建立物件的最佳方式。在工廠模式中,我們建立物件時不會對客戶端暴露建立邏輯,並且是通過使用一個共同的介面指向新建立的物件。 1.簡介 意圖:定義一個建立物件的介面,讓

JS-Javascript 迭代器設計模式 Iterator pattern

這篇博文簡短的提一下Iterator的設計模式,以及這種設計模式給我們帶來什麼樣的好處。 1.begin 為了體現面向物件的特性(近年來的ES6為這方面做了很大的努力),此篇博文的語言編寫基於typescript,當然也會附上原生js的書寫方式。 1.1迭

策略模式(Strategy Pattern)(二):HeadFirst中鴨子的實現

一、問題描述 joe上班的公司做了一套成功的模擬鴨子的遊戲:SimUDuck,遊戲中會出現各種鴨子,一邊游泳,一邊呱呱叫,由於公司競爭壓力加劇,必須重新設計鴨子(Duck)類,要求是:便於產生新的鴨子物件,可為鴨子新增新的行為,易於維護,動態設定行為。 二、類圖

設計模式Singleton Pattern

package singleton; /** * 指令重排序 * 優化指令,提高程式執行效率。 * 例如: * 分配物件的記憶體空間、 初始化物件、設定instance指向剛分配的記憶體地址

設計模式-策略模式strategy pattern

pre rac uml類圖 獨立 CA 使用 dep () nes 來說說設計模式吧,最近開始看設計模式,覺得挺有意思的。設計模式網上的資料的挺多的,而且大部分是大家相互轉來轉去的。感覺也挺沒有意思。我就自己寫一點吧! 開始 學習設計模式,我

設計模式--spring原始碼中使用策略模式Strategy Pattern

策略模式(Strategy Pattern)中體現了兩個非常基本的面向物件設計的基本原則:封裝變化的概念;程式設計中使用介面,而不是對介面實現。策略模式的定義如下: 定義一組演算法,將每個演算法都封裝起來,並且使它們之間可以互換。策略模式使這些演算法在客戶端呼叫它們的時