首页 > 代码库 > 桥接模式

桥接模式

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();

}

}


}

桥接模式