zoukankan      html  css  js  c++  java
  • 设计模式适配器模式

    定义:

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

    关键词:

    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

  • 相关阅读:
    数列分块入门九题(一):LOJ6277~6279
    Luogu P4211 [LNOI2014]LCA
    Luogu P2279 [HNOI2003]消防局的设立
    Luogu P3177 [HAOI2015]树上染色
    51Nod 1677 treecnt
    CYJian的水题大赛
    51Nod 1299 监狱逃离
    51Nod 1705 七星剑
    51Nod 1443 路径和树
    51Nod 1815 调查任务
  • 原文地址:https://www.cnblogs.com/oneword/p/1513676.html
Copyright © 2011-2022 走看看