發表文章

目前顯示的是 12月, 2017的文章

[Design-Pattern] Observer Pattern

Observer Pattern - 觀察者模式 目的 : 處理一個物件對應多個物件之間的連動關係。類似 Mqtt sub/pub 當一個觀察者物件(Subject)改變時,其他的觀察者物件(Observer)都會收到通知,並執行對應的動作。 善用抽象類別 Subject public abstract class Subject { protected List<Adventurer> adventurers = new List<Adventurer>(); public void add(Adventurer adventurer) { Console.WriteLine($"{adventurer.Name} subscribe the topic!"); adventurers.Add(adventurer); } public void remove(Adventurer adventurer) { adventurers.Remove(adventurer); } public abstract void sendQuestion(string msg); } Association public class Association : Subject { public override void sendQuestion(string msg) { foreach (var adventurer in adventurers) { adventurer.getQuestions(msg); } } } Adventurer public abstract class Adventurer { public string Name; public ...

[Design-Pattern] Decorator Pattern

Decorator Pattern - 裝飾模型 Decorator Pattern 也可以稱作 Wrapper Patter。 優點 1. 動態新增功能至已存在的類別 2. 另一種子類別(抽象類別) 3. 支援開閉原則 何時去使用 1. 大型系統(Legacy System) 2. 控制項(Controller) 3. Sealed Class 介面 public interface ICar { double GetCost(); string GetName(); } 被裝飾者類別 (Component) public class Car:ICar { public double GetCost() { return 600000; } public string GetName() { return "Car"; } } 抽象類別 public abstract class DecoratorAccessoryCar : ICar { private readonly ICar _car; public DecoratorAccessoryCar(ICar car) { this._car = car; } public virtual double GetCost() { return this._car.GetCost(); } public virtual string GetName() { return this._car.GetName(); } } 裝飾類別 (Decorator) public class BasicAccessories : DecoratorAccessoryCar { ...