zoukankan      html  css  js  c++  java
  • 设计模式——Bridge模式

    6        Bridge模式

    6.1      概述

    Bridage模式就是把抽象部分和它的实现部分分离开来,让两者可独立变化。这里的抽象部分指的是一个概念层次上的东西,它的实现部分指的是实现这个东西的(功能)部分,分离就把实现部分从它要实现的抽象部分独立出来,自我封装成对象。

    6.2      设计

    思路简单理解就是:在类中抽离方法形成另一个类。比如对于动物狗,有行走功能。一般我们设计时,把狗设计成一个类,里面有方法“行走”。那么Bridge模式就是把“行走”方法从“狗”类中抽离出来,形成“行走”类,并在“狗”类中使用这个“行走”对象,实现行走功能。这样,“狗”类和“行走”类都可以独立变化。

    6.3      实现

    UML图:

    示例代码为:

     1using System;
     2
     3namespace Example
     4{
     5    /// <summary>
     6    /// 示例
     7    /// </summary>

     8    class Example
     9    {
    10        /// <summary>
    11        /// 应用程序的主入口点。
    12        /// </summary>

    13        [STAThread]
    14        static void Main(string[] args)
    15        {
    16            Run r = new Run() ;//狗跑
    17            Dog a = new Dog( r ) ;
    18            Console.Write( "Dog can " ) ;
    19            a.Move() ;
    20
    21            Fly f = new Fly() ;//鸟飞
    22            Bird b = new Bird( f ) ;
    23            Console.Write( "Bird can " ) ;
    24            b.Move() ;
    25        }

    26        /// <summary>
    27        /// 动物(抽象部分)
    28        /// </summary>

    29        public class Animal
    30        {
    31            protected Movement move = null ;
    32        
    33            public Animal( Movement m )
    34            {
    35                move = m ;
    36            }

    37            public virtual void Move()
    38            {
    39                move.Move() ;
    40            }

    41        }

    42        /// <summary>
    43        /// 狗
    44        /// </summary>

    45        public class Dog : Animal
    46        {
    47            public Dog( Movement m ) : base( m ) {}
    48            public override void Move()//狗运动
    49            {
    50                move.Move() ;
    51            }

    52        }

    53        /// <summary>
    54        /// 鸟
    55        /// </summary>

    56        public class Bird : Animal
    57        {
    58            public Bird( Movement m ) : base( m ) {}
    59            public override void Move()//鸟运动
    60            {
    61                move.Move() ;
    62            }

    63        }

    64        /// <summary>
    65        /// 运动(实现部分)
    66        /// </summary>

    67        public class Movement
    68        {
    69            public Movement() {}
    70            public virtual void Move()
    71            {
    72                Console.WriteLine( "Move" ) ;
    73            }

    74        }

    75        /// <summary>
    76        /// 具体的运动——跑
    77        /// </summary>

    78        public class Run : Movement
    79        {
    80            public Run() {}
    81            public override void Move()
    82            {
    83                Console.WriteLine( "Run" ) ;
    84            }

    85        }

    86        /// <summary>
    87        /// 具体的运动——飞
    88        /// </summary>

    89        public class Fly : Movement
    90        {
    91            public Fly() {}
    92            public override void Move()
    93            {
    94                Console.WriteLine( "Fly" ) ;
    95            }

    96        }

    97    }

    98}

    99
  • 相关阅读:
    雷林鹏分享:Lua 运算符
    雷林鹏分享:PHP JSON
    不要提交代码到HEAD上
    Mr Cao 的提问
    使用masory
    git 下载单个文件 已经添加多个远程服务器
    自动生产jason的工具
    简单的应用可以用storyBoard
    《创业维艰》
    造成死锁的各种情况
  • 原文地址:https://www.cnblogs.com/fengchao/p/206971.html
Copyright © 2011-2022 走看看