系统架构技能之设计模式—桥接模式

  一、上篇回顾

  上篇我们讲述了比较常用的适配器模式,并且分析了适配器的一般使用场景:

       1、我们在使用第三方的类库,或者说第三方的API的时候,我们通过适配器转换来满足现有系统的使用需求。

       2、我们的旧系统与新系统进行集成的时候,我们发现旧系统的数据无法满足新系统的需求,那么这个时候,我们可能需要适配器,完成调用需求。

       3、我们在使用不同数据库之间进行数据同步。(我这里只是分析的是通过程序来说实现的时候的情况。还有其他的很多种方式[数据库同步])。

  并且讲述了对象适配器和类适配器的区别:

  对象适配器:不是通过继承的方式,而是通过对象组合的方式来进行处理的,我们只要学过OO的设计原则的都知道,组合相比继承是推荐的方式。

  类适配器:通过继承的方式来实现,将旧系统的方法进行封装。对象适配器在进行适配器之间的转换过程中,无疑类适配器也能完成,但是依赖性会加大,并且随着适配要求的灵活性,可能通过继承膨胀的难以控制。

  并且由于C#中不支持多继承,以至于限制我们的继承的策略。而对象组合的方式则不会有太多的限制。

  我们在上篇中还讲述了适配器之间的转配,但是没有给出一个示例代码:

  我们这里给出适配器之间相互转换的情况,有的时候,我们发现2个适配器之间也需要进行相应的转配,例如我们上面的数据库和XML文件的查询接口,例如有的时候,我需要把XML文件的数据转换到数据库中,或者把数据库中的数据保存成XML形式,这个时候,我们就需要定义一个对象,来完成相应的适配器之间的适配。   image  针对上面的说明,我们这里给出代码的核心部分:

旧系统的查询服务:
public interface IQuery
{
object Query();
}
public class DbQuery : IQuery
{
public object Query()
{
throw new NotImplementedException();
}
}
public class XMLQuery : IQuery
{
public object Query()
{
throw new NotImplementedException();
}
}
旧系统的持久化服务:
public interface ISave
{
bool Save(object obj);
}
public class XMLSave : ISave
{
public bool Save(object obj)
{
throw new NotImplementedException();
}
}
public class DbSave : ISave
{
public bool Save(object obj)
{
throw new NotImplementedException();
}
}
新系统适配器持久化接口:
public interface IPersistence
{
bool Persistence(object obj);
}
public class XMLPersistenceAdapter : IPersistence
{
XMLSave save
= new XMLSave();

public bool Persistence(object obj)
{
return save.Save(obj);
}
}
public class DbPersistenceAdapter : IPersistence
{
DbSave save
= new DbSave();

public bool Persistence(object obj)
{
return save.Save(obj);
}
}
系统查询服务适配器:
ublic
interface ISelect
object GetList();
public class XMLQueryAdapter : ISelect
{
private XMLQuery query = new XMLQuery();
public object GetList()
{
return query.Query();
}
}
public class DbQueryAdapter : ISelect
{
private DbQuery query = new DbQuery();
public object GetList()
{
return query.Query();
}
}
适配器之间的转配器:
public interface IAdapterToAdapter
{
object GetData();

bool SaveData();
}

通用的转配器实现方案:
public class ConvertAdapter : IAdapterToAdapter
{
private Dictionary<string, AdapterSetting> settings = new Dictionary<string, AdapterSetting>();
public ConvertAdapter()
{
//从配置文件中读取要转换的适配器节点指点的关系,并且配置要调用的方法
settings.Add("", new AdapterSetting());
}

public object GetData()
{
return settings[""].AdapterName.Query();
}

public bool SaveData()
{
return settings[""].ToAdapterName.Persistence(this.GetData());
}
}

it知识库系统架构技能之设计模式—桥接模式,转载需保留来源!

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。