设计模式--适配器模式(Adapter模式)

适配器模式

Adapter适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

这么听来是不是感觉特别的神奇,其实适配器在生活中随处可见,就比如我们现在所使用的笔记本来举例子,大家都知道一般家用的插座的电压是220v,那么对于笔记本基本能够接受的电压是19V,如何能够让笔记本通电就需要用到一个适配器来使用一个输入为220V的电压转换成一个输出19V的电压到笔记本端。适配器就是将原本不适合的东西转换成我们想要的最终结果。

适配器模式实例

场景:原有的系统获取的是一个文本类型的数据,而新的接口里面获取的是一个整型,如何不改变原有的接口的情况下使用新的接口,我们在需要添加一个适配器。

C++代码

原有厂家接口:

public interface IInhere
    {
        string text
        {
            get;
            set;
        }
    
         string getText();
        void setText(string text);
    }
class InhereClass:IInhere
    {
        public string text { get; set; }

        public string getText()
        {
            return text;
        }

        public void setText(string text)
        {
            this.text = text;
        }
    }

新的厂家接口:

interface INew
    {
        int number
        {
            get;
            set;
        }
        int getNumber();
        void setNumber(int number);
    }
class NewClass:INew
    {
        public int number { get; set; }

        public int getNumber()
        {
            return this.number;
        }

        public void setNumber(int number)
        {
            this.number = number;
        }
    }

适配器代码:

class Adapter:IInhere
    {
        
        private NewClass newClass=new NewClass();
        public string text { get; set; }

        public string getText()
        {
            return newClass.getNumber().ToString();
        }

        public void setText(string text)
        {
            try
            {
                newClass.setNumber(Convert.ToInt32(text));
            }
            catch (ArgumentException ex)
            {
                throw new ArgumentException("传入错误,请传入一个有效的数字的字符形式");
            }
        }
    }

测试代码:

static void Main(string[] args)
{
	InhereClass _inhereClass=new InhereClass();
	_inhereClass.setText("10");
	Console.WriteLine(_inhereClass.getText());

	NewClass _iNew = new NewClass();
	_iNew.setNumber(100);
	Console.WriteLine(_iNew.getNumber());

	IInhere adapter=new Adapter();
	adapter.setText("1000");
	Console.WriteLine(adapter.getText());
}

我们发现原有的厂家接口用的是String类型,但是新的厂家接口用的却是Int类型,我们在其中添加一个Adapter类来进行数据的包装和处理,这样我们的系统根据不用关心新的厂家是什么类型,因为最终都会通过Adapter转换成我们想要的类型来进行相应的处理。