23种设计模式-08-桥接模式

mac2025-04-14  4

public abstract class Os { /// <summary> /// 装系统 /// </summary> public abstract void InstallOs(string computerName); /// <summary> /// 分区 /// </summary> public abstract void DiskPartition(string computerName); } public class Win7 : Os { public override void InstallOs(string computerName) { Console.WriteLine(computerName + "重装Win7系统!"); } public override void DiskPartition(string computerName) { Console.WriteLine(computerName + "重新分区Win7系统!"); } } public class Win10 : Os { public override void InstallOs(string computerName) { Console.WriteLine(computerName + "重装Win10系统!"); } public override void DiskPartition(string computerName) { Console.WriteLine(computerName + "重新分区Win10系统!"); } } public class Computer { public Os OsOperater { get; set; } //一定要用虚方法:因为有多个牌子的电脑(多对多),虚方法可以将实现延后到子类,父类只是用来桥接 public virtual void InstallOs(string computerName = null) { OsOperater.InstallOs(computerName); } public virtual void DiskPartition(string computerName = null) { OsOperater.DiskPartition(computerName); } } public class AsusComputer : Computer { public override void InstallOs(string computerName = null) { base.InstallOs("华硕"); } public override void DiskPartition(string computerName = null) { base.DiskPartition("华硕"); } } public class LenovoComputer : Computer { public override void InstallOs(string computerName = null) { base.InstallOs("联想"); } public override void DiskPartition(string computerName = null) { base.DiskPartition("联想"); } } class Program { /// <summary> /// 桥接模式: /// GOF:将抽象部分和实现部分分离,使他们可以独立的变化,他们之间的关系只依赖于抽象 /// 1.个人理解跟建造者模式差不多,也是类似于指挥者和建造者(如遥控器去遥控电视:换台,调音量;但是有不同牌子的遥控器和不同牌子的电视) /// 2.个人理解建造者模式和桥接模式的区别是: /// 建造者模式是一对多:一个指挥者,多个建造者(一个老板,多个员工:老板是实体,员工是抽象) /// 桥接模式是多对多:多个指挥者,多个建造者(多个老板,多个员工:老板是抽象,员工也是抽象),然后依赖抽象 /// 基本上只要是多对多的,基本上都可以想到桥接模式。 /// 最直接的桥接模式的例子:程序操作数据库的增删改查: /// 程序有java,.Net,Python等等...,数据库也有sqlserver,oracle,mysql,sqllite等等... /// 此文中的例子: /// 电脑装系统:电脑有联想,华硕,惠普等等...系统有win7,win8,win10等等... /// </summary> /// <param name="args"></param> static void Main(string[] args) { //初始化电脑对象:可以有多个 Computer computer1 = new AsusComputer(); //指定操作系统:也可以是多个,这样就实现了多对多 computer1.OsOperater = new Win10(); computer1.DiskPartition(); computer1.InstallOs(); Computer computer2 = new LenovoComputer(); computer2.OsOperater = new Win7(); computer2.DiskPartition(); computer2.InstallOs(); Computer computer3 = new LenovoComputer(); computer3.OsOperater = new Win10(); computer3.DiskPartition(); computer3.InstallOs(); Console.WriteLine("End"); Console.ReadKey(); } }

 

最新回复(0)