策略模式(Strategy Pattern)

Tay’s Log
2 min readNov 20, 2017

--

Design Pattern
運用其他開發人員的經驗,他們遇到過的相同問題,來解決這些問題。(經驗復用)

Strategy Pattern

Wikipedia:
策略模式作爲一種軟體設計模式,指對象有某個行爲,但是在不同的場景中,該行爲有不同的實現算法。比如每個人都要「交個人所得稅」,但是「在美國交個人所得稅」和「在中國交個人所得稅」就有不同的算稅方法。

Requirements:
1.Object-Oriented Programming(OOP)

用OO設計一個鴨子,使其他的鴨子繼承它。

superclass : Duck
subclass : XxxDuck、OooDuck、etc…

問題:
Q1: 新增一功能會飛
A1: Duck 新增一個fly method 會飛
A1導致一些問題:
並非每個subclass 需要此功能(不是每個鴨子會飛)
運行時行為不容易改變
難知道所有鴨子行為(牽一髮動全身,造成其他鴨子不想要的改變)

A2: 利用Interface 把fly() 抽取出來讓要飛的鴨子implenment
A2導致了一些問題:
重複代碼變多(No reuse)=>維護不易

*A3: 抽出鴨子行為定義成Interface由一組行為類實現Interface
把鴨子行為與鴨子抽離出鴨子形成
鴨子 — 行為

策略模式:
定義了(行為)群,分別封裝起來,讓他們之間可以
互相替換(Polymorphism),此模式讓行為的變化獨立於使用行為的類。

知道OO基礎,並不足以讓你設計出良好的系統
良好的設計必須具備

  • Reusable
  • Extensible
  • Maintainable

*設計原則: 獨立出變化的部分不與那些不變化的部分混在一起。
設計原則: 針對介面寫code,而不是實現寫code。
設計原則: 多用組合,少用繼承

Where to find this sample code
https://github.com/Wei789/Design-Pattern/tree/master/StrategyPattern/StrategyPattern.playground

--

--

Tay’s Log
Tay’s Log

Written by Tay’s Log

這個Blog是為了讓有一顆金魚腦的宅宅工程師,用來記錄用的。

No responses yet