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

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();
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值