您的位置:首页 > 其它

设计模式之桥梁模式

2015-03-20 16:40 148 查看
场景描述:

1、 在系统设计时,发现类的继承有N层时,但不能确定是否会更改继承来的共性,可以考虑使用桥梁模式。

2、类图描述:桥梁模式是抽象和实现的解耦,使得两者可以独立地变化。



3、程序实现举例(C#):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BridgeApp
{
//实现话角色
public interface IRealizeInfactor
{
void Work();
void Sleep();
void Eat();
}
//具体实现化角色
public class RealizeClassA : IRealizeInfactor
{
public void Work()
{
Console.WriteLine("实现类A工作");
Console.Read();
}
public virtual void Sleep()
{
Console.WriteLine("实现类A睡觉");
Console.Read();
}
public void Eat()
{
Console.WriteLine("实现类A吃饭");
Console.Read();
}
}
public class RealizeClassB : IRealizeInfactor
{
public void Work()
{
Console.WriteLine("实现类B工作");
Console.Read();
}
public void Sleep()
{
Console.WriteLine("实现类B睡觉");
Console.Read();
}
public void Eat()
{
Console.WriteLine("实现类B吃饭");
Console.Read();
}
}
//抽象化角色
public abstract class Abstractor
{
private IRealizeInfactor irealizeInfactor;
public Abstractor(IRealizeInfactor _irealizeInfactor)
{
this.irealizeInfactor = _irealizeInfactor;
}
public virtual void DoThings()
{
this.irealizeInfactor.Work();
this.irealizeInfactor.Sleep();
}
//获得实现化角色
public IRealizeInfactor GetIRealizeInfactor()
{
return irealizeInfactor;
}
}
//具体抽象化角色
public class RefinedAbstrctor : Abstractor
{
//覆写构造函数
public RefinedAbstrctor(IRealizeInfactor _irealizeInfactor)
: base(_irealizeInfactor)
{
}
//修正父类
public override void DoThings()
{
/*业务处理具体实行*/

base.DoThings();
base.GetIRealizeInfactor().Eat();
}
}
}


4、程序调用:

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BridgeApp
{
class Program
{
static void Main(string[] args)
{
IRealizeInfactor infactor = new RealizeClassB();
RefinedAbstrctor reAbstractor = new RefinedAbstrctor(infactor);
reAbstractor.DoThings();
infactor = new RealizeClassA();
reAbstractor = new RefinedAbstrctor(infactor);
reAbstractor.DoThings();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: