首页 > 代码库 > 桥接模式
桥接模式
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();
}
}
}
桥接模式