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
  • 相关阅读:
    HDU 5585 Numbers
    HDU 3308 LCIS
    POJ 2991 Crane
    POJ 1436 Horizontally Visible Segments
    POJ 3667 Hotel
    HaiHongOJ 1003 God Wang
    【SDOI 2008】 递归数列
    5月19日省中提高组题解
    【HDU 1588】 Gauss Fibonacci
    【POJ 3233】Matrix Power Series
  • 原文地址:https://www.cnblogs.com/fengchao/p/206971.html
Copyright © 2011-2022 走看看