设计模式 - 19)桥接模式

// 硬件抽象类
abstract class HandsetBrand
{
    // 硬件上安装的软件列表
    protected IList<HandsetSoftware> _softwareList = new List<HandsetSoftware>();
    public void AddSoftware(HandsetSoftware soft)
    {
        _softwareList.Add(soft);
    }

    public void RemoveSoftware(HandsetSoftware soft)
    {
        _softwareList.Remove(soft);
    }

    public abstract void Run();        
}

class HansetBrandM : HandsetBrand
{
    public override void Run()
    {
        foreach (HandsetSoftware s in _softwareList)
        {
            s.Run();
        }
    }
}

class HansetBrandN : HandsetBrand
{
    public override void Run()
    {
        foreach (HandsetSoftware s in _softwareList)
        {
            s.Run();
            break;
        }
    }
}

abstract class HandsetSoftware
{
    public abstract void Run();
}

class HansetGame : HandsetSoftware
{
    public override void Run()
    {
        Console.WriteLine("Run game");
    }
}

class HansetChat : HandsetSoftware
{
    public override void Run()
    {
        Console.WriteLine("Run Chat");
    }
}

将抽象部分与它实现的部分分离。
上面的例子,手机有各个品牌,手机里面有各个软件,如果让A品牌的A软件继承 A品牌,那么会导致继承的滥用。因为它们是合成关系。
就像酒店分五星级、四星级,酒店里面有早餐、健身房。如果让五星级早餐继承五星级酒店,会导致每种酒店下的每种服务都需要一个类。

posted @ 2020-12-27 22:12  鑫茂  阅读(71)  评论(0编辑  收藏  举报