自定义观察者模式,实现主题和观察者的解耦,主题变化时通知所有观察者。
// 观察者接口 public interface IObserver { void Update(string message); } // 主题接口 public interface ISubject { void Attach(IObserver observer); void Detach(IObserver observer); void Notify(string message); } // 具体主题 public class NewsSubject : ISubject { private readonly List<IObserver> _observers = new List<IObserver>(); public void Attach(IObserver observer) => _observers.Add(observer); public void Detach(IObserver observer) => _observers.Remove(observer); public void Notify(string message) { foreach (var observer in _observers) { observer.Update(message); } } } // 具体观察者 public class UserObserver : IObserver { private readonly string _userName; public UserObserver(string name) => _userName = name; public void Update(string message) => Console.WriteLine($"{_userName} 收到消息: {message}"); } // 调用示例 public static void TestObserver() { var news = new NewsSubject(); news.Attach(new UserObserver("张三")); news.Attach(new UserObserver("李四")); news.Notify("C# 进阶教程已发布!"); }
49. C# 实现简单的策略模式
定义算法家族,封装每个算法,使它们可以互相替换,算法变化不影响客户端。
csharp
// 策略接口 public interface ISortStrategy { void Sort(List<int> list); } // 冒泡排序策略 public class BubbleSort : ISortStrategy { public void Sort(List<int> list) { Console.WriteLine("使用冒泡排序"); for (int i = 0; i < list.Count - 1; i++) { for (int j = 0; j < list.Count - i - 1; j++) { if (list[j] > list[j + 1]) { (list[j], list[j + 1]) = (list[j + 1], list[j]); } } } } } // 快速排序策略 public class QuickSort : ISortStrategy { public void Sort(List<int> list) { Console.WriteLine("使用快速排序"); QuickSortInternal(list, 0, list.Count - 1); } private void QuickSortInternal(List<int> list, int left, int right) { // 快速排序实现逻辑 } } // 上下文类 public class Sorter { private ISortStrategy _strategy; public Sorter(ISortStrategy strategy) => _strategy = strategy; public void SetStrategy(ISortStrategy strategy) => _strategy = strategy; public void SortList(List<int> list) => _strategy.Sort(list); } // 调用示例 public static void TestStrategy() { var list = new List<int> { 3, 1, 4, 1, 5, 9 }; var sorter = new Sorter(new BubbleSort()); sorter.SortList(list); sorter.SetStrategy(new QuickSort()); sorter.SortList(list); }
50. C# 实现简单的工厂模式
通过工厂类封装对象的创建逻辑,客户端无需直接实例化具体类。