• 极速理解设计模式系列:7.桥接模式(Bridge Pattern)


    四个角色:抽象类(Abstraction)、扩充抽象类(RefinedAbstraction)、实现类接口(Implementor)、具体实现类(ConcreteImplementor) 

            抽象类(Abstraction):主控类,内部有一个实现类接口(Implementor)的对象可调用。

            扩充抽象类(RefinedAbstraction):扩充抽象类,个性定制自身行为和属性继承于Abstraction。

            实现类接口(Implementor):被操作类。

            具体实现类(ConcreteImplementor) :继承并实现Implementor。

     实现思路:多个扩充抽象类继承于Abstraction主控类,并且操作其内部的Implementor的行为。以此达到控制多种具体实现类的目的。这是一个多对多的关系。

     类图:

            应用场景:人听音乐,人有很多种人(年轻人、老年人、中年人、小孩子等),音乐有很多种(摇滚音乐、乡村音乐、爵士音乐、流行音乐等)。

            分析:不同的人可以听不同种类的音乐,人的种类是会变化的,音乐的种类也是活动可变的,在这里将人和音乐抽象出来,并且将音乐的抽象放入人的抽象中去,这样人听什么音乐将有客户端决定。

            下面我们在控制台程序去演示一下如何使用Bridge Pattern:

            一、 抽象类(Abstraction)

         //抽象类(Abstraction)
    abstract class People
    {
    private Music music;

    public Music Music
    {
    get { return music; }
    set { music = value; }
    }

    public abstract void StartListen();
    }

            二、扩充抽象类(RefinedAbstraction)

       // 扩充抽象类(RefinedAbstraction)
    class YoungPeople : People
    {
    public override void StartListen()
    {
    Console.Write(
    "年轻人在听");
    Music.Play();
    }
    }
    // 扩充抽象类(RefinedAbstraction)
    class OldPeople : People
    {
    public override void StartListen()
    {
    Console.Write(
    "老年人在听");
    Music.Play();
    }
    }

            三、实现类接口(Implementor)

        // 实现类接口(Implementor)
    abstract class Music
    {
    public abstract void Play();
    }

            四、具体实现类(ConcreteImplementor) 

        // 具体实现类(ConcreteImplementor) 
    class RockMusic : Music
    {
    public override void Play()
    {
    Console.WriteLine(
    "摇滚歌曲");
    }
    }
    // 具体实现类(ConcreteImplementor)
    class CountryMusic : Music
    {
    public override void Play()
    {
    Console.WriteLine(
    "乡村歌曲");
    }
    }

            五、客户端(Client)

        class Program
    {
    static void Main(string[] args)
    {
    //客户端实现。
    People youngPeople = new YoungPeople();

    youngPeople.Music
    = new RockMusic();
    youngPeople.StartListen();

    youngPeople.Music
    = new CountryMusic();
    youngPeople.StartListen();
    Console.WriteLine(
    "------------------");

    People oldPeople
    = new OldPeople();
    oldPeople.Music
    = new CountryMusic();
    oldPeople.StartListen();

    Console.ReadLine();
    }
    }

            如需源码请点击 BridgePattern.rar  下载。

  • 相关阅读:
    最大子数组问题(分治策略实现)
    Solving the Detached Many-to-Many Problem with the Entity Framework
    Working With Entity Framework Detached Objects
    Attaching detached POCO to EF DbContext
    如何获取qq空间最近访问人列表
    Health Monitoring in ASP.NET 2.0
    problem with displaying the markers on Google maps
    WebMatrix Database.Open… Close() and Dispose()
    Accessing and Updating Data in ASP.NET: Retrieving XML Data with XmlDataSource Control
    Create web setup project that has crystal reports and sql script run manually on client system
  • 原文地址:https://www.cnblogs.com/chengxingliang/p/2179672.html
Copyright © 2020-2023  润新知