设计模式--适配器模式

定义:

将一个类的借口转换成客户希望的另外的一个接口,适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作.

关键词:

Adapter

结构图:

image

应用场景:

当想使用一个已经存在的类时,如果它的接口和要求不相同时,考虑使用适配器模式.

即:设计之初,应尽可能的进行重构;在进行项目维护时,多使用适配器模式.

例子:

类图:

image

代码:
public interface IWrite
{
    void Record();
}

public abstract class Write : IWrite
{
	public Write()
	{
		//
		//TODO: 在此处添加构造函数逻辑
		//
	}

    public abstract void Record();
}

public class WriteToDB : Write
{
    public override void Record()
    {
        HttpContext.Current.Response.Write("Write To DataBase!<br/>");
    }
}

public class WriteToFile : Write
{
    public override void Record()
    {
        HttpContext.Current.Response.Write("Write To File!<br/>");
    }
}
以上为我们提供的.
下面为客户在页面的调用.
页面调用:
    protected void Page_Load(object sender, EventArgs e)
    {
        IWrite iw = new WriteToDB();
        iw.Record();

        iw = new WriteToFile();
        iw.Record();
    }
效果:
image 
但是如果此时,客户要求接口改为以下:
public interface IWrites
{
    void RecordLog();
}

我们现在在程序中已经大量的使用了IWrite提供的接口,并且对源码进行修改特别麻烦,此时,我们要做的就是使用适配器模式,对现有代码进行修改

我们现在要做的就是:

public class MyWrite : IWrites
{
    IWrite iw;
    public MyWrite(Write writeAdapter)
    {
        iw = writeAdapter;
    }
    public void RecordLog()
    {
        iw.Record();
    }
}

页面调用时:

    protected void Page_Load(object sender, EventArgs e)
    {
        IWrites iw1 = new MyWrite(new WriteToDB());
        iw1.RecordLog();

        IWrites iw2 = new MyWrite(new WriteToFile());
        iw2.RecordLog();
    }

页面效果:

image

posted @ 2009-06-30 09:28  Localhost  阅读(215)  评论(0编辑  收藏  举报