using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
/*
 
 
 桥接模式
 
 
 * 把抽象部分与它的实现部分分离  变得可以独立变化
 * 
 多用聚合,少用继承
 合成 聚合 
 
 * 合成是指一个整体  一个对象完整是有很多个部份组成 不可分开 (强的拥有)
 * 
 * 聚合  是指多个对象聚合在一起成一个对象  (弱的拥有)
 * (或说一个对象是一个聚合对象的一部份。)
 * 聚合是一种是不一定有的情况
*/
namespace App_MYCS.HDL_SJMS.QJMS
{
    class my_QJMS
    {
        public void DY()
        {
            abstraction ab = new refinedAbstraction();
            ab.SetImplementor(new ConcreteImplementorA());
            ab.Operation();
            ab.SetImplementor(new ConcreteImlementorB());
            ab.Operation();
        }
}
    abstract class Implementor
    {
        public abstract void Operation();
    }
    class ConcreteImplementorA : Implementor
    {
        public override void Operation()
        {
            Console.WriteLine("具体实现A的方法执行");
        }
    }
    class ConcreteImlementorB : Implementor
    {
        public override void Operation()
        {
            Console.WriteLine("具体实现B的方法执行");
        }
    }
    class abstraction
    {
        protected Implementor implementor;
        public void SetImplementor(Implementor implementor)
        {
            this.implementor = implementor;
        }
        public virtual void Operation()
        {
            implementor.Operation();
        }
    }
    class refinedAbstraction : abstraction
    {
        public override void Operation()
        {
            implementor.Operation();
        }
    }
    //----------------------------------------------------------
    //例子
    //a 类
    abstract class qjms_ab_class1
    {
        public abstract void Rumfunction();
    }
    //b 类
    abstract class qjms_ab_mclass
    {
        protected qjms_ab_class1 abclass;//包适A 类对象
        public void serClass(qjms_ab_class1 abclass)
        {
            this.abclass = abclass;
        }
        public abstract void Runfunction();
    }
    //可以接着增加不同的类别并在B类中合
    //a 类子类
    class qjms_a_class1 : qjms_ab_class1
    {
        public override void Rumfunction()
        {
            Console.WriteLine("运行相关操作");
        }
    }
    class qjms_a_class2 : qjms_ab_class1
    {
        public override void Rumfunction()
        {
            Console.WriteLine("运行相关操作");
        }
    }
    //b 类子类
    class qjms_b_class1 : qjms_ab_mclass
    {
        public override void Runfunction()
        {
            abclass.Rumfunction();
        }
    }
    class qjms_b_class2 : qjms_ab_mclass
    {
        //自身的特点
        public override void Runfunction()
        {
            abclass.Rumfunction();
        }
    }
    class qjms_dy
    {
        public void dy()
        {
            //组合各种功能
            qjms_ab_mclass ab = new qjms_b_class1();
            ab.serClass(new qjms_a_class1());
            ab.Runfunction();
            ab.serClass(new qjms_a_class2());
            ab.Runfunction();
            //不加载的功能 就没有相应的功能
            ab = new qjms_b_class2();
            ab.serClass(new qjms_a_class1());
            ab.Runfunction();
            
        }
}
}
原文:http://www.cnblogs.com/longkai178/p/5815119.html