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

    类的适配器模式
    using System;
    
    /// 这里以插座和插头的例子来诠释适配器模式
    /// 现在我们买的电器插头是2个孔,但是我们买的插座只有3个孔的
    /// 这是我们想把电器插在插座上的话就需要一个电适配器
    namespace 设计模式之适配器模式
    {
        /// <summary>
        /// 客户端,客户想要把2个孔的插头 转变成三个孔的插头,这个转变交给适配器就好
        /// 既然适配器需要完成这个功能,所以它必须同时具体2个孔插头和三个孔插头的特征
        /// </summary>
        class Client
        {
            static void Main(string[] args)
            {
                // 现在客户端可以通过电适配要使用2个孔的插头了
                IThreeHole threehole = new PowerAdapter();
                threehole.Request();
                Console.ReadLine();
            }
        }
    
        /// <summary>
        /// 三个孔的插头,也就是适配器模式中的目标角色
        /// </summary>
        public interface IThreeHole
        {
            void Request();
        }
    
        /// <summary>
        /// 两个孔的插头,源角色——需要适配的类
        /// </summary>
        public abstract class TwoHole
        {
            public void SpecificRequest()
            {
                Console.WriteLine("我是两个孔的插头");
            }
        }
    
        /// <summary>
        /// 适配器类,接口要放在类的后面
        /// 适配器类提供了三个孔插头的行为,但其本质是调用两个孔插头的方法
        /// </summary>
        public class PowerAdapter:TwoHole,IThreeHole
        {
            /// <summary>
            /// 实现三个孔插头接口方法
            /// </summary>
            public void Request()
            {
                // 调用两个孔插头方法
                this.SpecificRequest();
            }
        }
    }
    对象的适配器模式
    namespace 对象的适配器模式
    {
        class Client
        {
            static void Main(string[] args)
            {
                // 现在客户端可以通过电适配要使用2个孔的插头了
                ThreeHole threehole = new PowerAdapter();
                threehole.Request();
                Console.ReadLine();
            }
        }
    
        /// <summary>
        /// 三个孔的插头,也就是适配器模式中的目标(Target)角色
        /// </summary>
        public class ThreeHole
        {
            // 客户端需要的方法
            public virtual void Request()
            {
                // 可以把一般实现放在这里
            }
        }
    
        /// <summary>
        /// 两个孔的插头,源角色——需要适配的类
        /// </summary>
        public class TwoHole
        {
            public void SpecificRequest()
            {
                Console.WriteLine("我是两个孔的插头");
            }
        }
    
        /// <summary>
        /// 适配器类,这里适配器类没有TwoHole类,
        /// 而是引用了TwoHole对象,所以是对象的适配器模式的实现
        /// </summary>
        public class PowerAdapter : ThreeHole
        {
            // 引用两个孔插头的实例,从而将客户端与TwoHole联系起来
            public TwoHole twoholeAdaptee = new TwoHole();
    
            /// <summary>
            /// 实现三个孔插头接口方法
            /// </summary>
            public override void Request()
            {
                twoholeAdaptee.SpecificRequest();
            }
        }
        
    }

    在以下情况下可以考虑使用适配器模式:

    1. 系统需要复用现有类,而该类的接口不符合系统的需求
    2. 想要建立一个可重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。
  • 相关阅读:
    Object.prototype.toString.call()进行类型判断
    JavaScript中的typeof操作符用法实例
    js ==与===区别(两个等号与三个等号)
    js nextSibling属性和previousSibling属性概述及使用注意
    Java 缓存技术之 ehcache
    不可不知 DDoS的攻击原理与防御方法
    jQuery的选择器中的通配符[id^='code']
    jquery $("[id$='d']").val();这句话什么意思?
    js 数组的操作
    【转】理解js中的原型链,prototype与__proto__的关系
  • 原文地址:https://www.cnblogs.com/gaocong/p/6773108.html
Copyright © 2011-2022 走看看