zoukankan      html  css  js  c++  java
  • 极速理解设计模式系列: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  下载。

  • 相关阅读:
    将博客搬至CSDN
    JAVA代码备注
    清空数据库SQL
    实战ASP.NET访问共享文件夹(含详细操作步骤)
    我希望我知道的七个JavaScript技巧 译(转)
    ASP.NET获取客户端网卡使用的MAC地址信息
    JS中offsetTop、clientTop、scrollTop、offsetTop各属性介绍
    JS屏幕距离参数
    jQuery插件开发精品教程,让你的jQuery提升一个台阶
    jQuery编程的最佳实践
  • 原文地址:https://www.cnblogs.com/chengxingliang/p/2179672.html
Copyright © 2011-2022 走看看