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

  • 相关阅读:
    最全的常用正则表达式大全--包括校验数字、字符、一些特殊的需求等【转】
    【转】浏览器“后退”、“前进”或可以这么去监听
    vue单页面title修改
    Vue.js中ref ($refs)用法举例总结
    js 程序执行与顺序实现详解
    $(document).ready和window.onload的区别 【转】
    linq to xml(C#)
    TCP/IP|| 建立连接或终止
    TCP/IP TCP
    TCP/IP DNS
  • 原文地址:https://www.cnblogs.com/oneword/p/1513676.html
Copyright © 2011-2022 走看看