///brige设计模式 ///解决层次之间的依赖关系 namespace C { public abstract class AddressBook { public abstract void Add(); public abstract void Find(); public abstract void Delete(); } /// <summary> /// 品牌M的通讯录 /// </summary> public class AddressBookM:AddressBook { public override void Add() { throw new NotImplementedException(); } public override void Find() { throw new NotImplementedException(); } public override void Delete() { throw new NotImplementedException(); } } class Game { public virtual void Run() { } } /// <summary> /// 当频繁给类增加新功能,应该使用类的聚合和组合 /// </summary> class Phone { #region Error //组合一个通讯录功能。 AddressBook book; ///****错误概念****** ///根据开发闭合原则,增加新功能的时候,增加对另一个对象的引用。? ///增加一种游戏 ///****错误概念****** Game game; public void AddBook() { book.Add(); } public void GameRun() { game.Run(); } #endregion ///*************正确概念************** ///开发闭合原则是:对已经存在的类修改是不允许的, 对增加新功能是允许 ///因为把手机的功能抽象成一个类 ///*************正确概念************* PhoneSoft phoneSoft; public void RunFunction() { phoneSoft.Run(); } /// <summary> /// 设置成不同的手机软件,如通讯录、游戏等 /// </summary> /// <param name="ps"></param> public void SetPhoneSoft(PhoneSoft ps) { this.phoneSoft = ps; } } /// <summary> /// 把变化的手机功能,抽象成一个类 /// </summary> class PhoneSoft { public virtual void Run() { } } class PhoneGame:PhoneSoft { public override void Run() { base.Run(); Console.WriteLine("This is game runnning"); } } class TestBrige { public static void Run() { Phone p = new Phone(); p.SetPhoneSoft(new PhoneGame()); p.RunFunction(); } } }
brige设计模式