设计模式 之 连接器

适配器型号(Adapter)
          将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本因为接口不兼容而不能一起工作的那些类能够一起工作。


    在我们生活中存在非常多适配器的样例。如插座转换器、笔记本电脑电源适配器等。

今天,我们就来看一下嘴熟悉的笔记本电源适配器的样例。通常。笔记本电脑须要的电流都是12-20V以内的直流电流,而我们家庭用电一般是220V的交流电,当然还有工业用电380V交流电,还有更低的110V交流电源。

怎样把这些不同的交流电源转换成笔记本电脑须要的直流电呢?这就须要电源适配器。

                                                              

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 适配器
{
    //电源基类
    public class BasePower
    {
        //电压值
        private float power;
        //单位
        private string unit = "V";
        //构造方法
        public BasePower(float power)
        {
            this.power = power;
        }

        public float Power
        {
            get { return power; }
            set { power = value; }
        }

        public string Unit
        {
            get { return unit; }
            set { unit = value; }
        }


    }
    //交流电源接口
    public interface IPower
    {
        //输出交流电
        void output();
    }

    //交流电源
    public class Power : BasePower,IPower 
    {
        //构造方法
        public Power(float power) : base(power) { }
        //电源输出
        public void output()
        {
            Console.WriteLine("这是" + this.Power + this.Unit + "交流电源!

"); } } //12V直流电源接口 public interface IPower12 { void output12v(); } //12V直流电源 public class Power12 : BasePower,IPower12 { public Power12(float power) : base(power) { } public void output12v() { Console.WriteLine("这是" + this.Power + this.Unit + "直流电源!

"); } } //电源适配器(实现目标对象接口。即12V电源接口) public class AdapterPower12 :IPower12 { //待转换的交流电源 private BasePower basePower; //适配器构造方法,将待转换对象传入 public AdapterPower12 (BasePower basePower) { this.basePower = basePower; } //实现目标对象方法 public void output12v() { //获得外部电源值 float powerFloat = this.basePower.Power; //进行电源转换 if (powerFloat == 380) { //380V电源转换 powerFloat = powerFloat / 31.67f; } else if (powerFloat == 220) { //220V电源转换 powerFloat = powerFloat / 18.33f; } else if(powerFloat==110) { //110V电源转换 powerFloat = powerFloat / 9.17f; } else { Console.WriteLine("不能适配电源!

"); return; } powerFloat = (int)(powerFloat * 10) / 10.0f; Console.WriteLine("这是" + powerFloat + this.basePower.Unit + "直流电源!"); } } class Program { static void Main(string[] args) { //首先生成一个220V电源对象! Power power220 = new Power(220); power220.output(); //生成一个12V电源对象 IPower12 power12 = new Power12(12); power12.output12v(); Console.WriteLine(); //使用电源适配器将220V电源转换成12V电源 Console.WriteLine("电源适配器转换中"); IPower12 adapterPower12 = new AdapterPower12(power220); adapterPower12.output12v(); Console.WriteLine("电源适配器转换结束!

"); } } }




适配器的类图


                


    在对象适配器模式结构图中包括例如以下几个角色:
           Target(目标抽象类):目标抽象类定义客户所需接口,能够是一个抽象类或接口,也能够是详细类。
           Adapter(适配器类):适配器能够调用还有一个接口。作为一个转换器,对Adaptee和Target进行适配,适配器类是适配器模式的核心。在对象适配器中,它通过继承Target并关联一个Adaptee对象使二者产生联系。


           Adaptee(适配者类):适配者即被适配的角色,它定义了一个已经存在的接口,这个接口须要适配,适配者类通常是一个详细类,包括了客户希望使用的业务方法,在某些情况下可能没有适配者类的源码。


主要长处:
       1.将目标类和适配者类解耦
       2.添加了类的透明度和复用性
       3.灵活性好和扩展性好


使用场合:
       1.软件系统结构须要升级或扩展,又不想影响原有系统的稳定执行的时候
       2.转换类之间的区别不是太大的时候

       3.想创建一个能够复用的类,该类能够与其它不想管的类或不可预见的类协同工作的时候


       适配器主要用于系统的升级扩展。或者版本号兼容性上。没有哪一个系统分析师会在软件设计阶段使用适配器模式的。

适配器能够非常好的解决版本号兼容问题。

另外,就是原有类和新的接口标准不能区别太大,否则。适配器是达不到预期效果的。适配器在软件的后期维护中具有非常大的优势,它不仅能保持原有系统的稳定。并且还能进行新功能的扩展。



与桥接和装饰的差别
    1.与桥接的差别:适配器是将一种接口转换为还有一种接口的设计模式。而桥接则是把实现和它的接口分开,以便它们能够独立地变化。桥接并非用来把一个已有的对象接到不相匹配的接口上的。

    2.与装饰的差别:适配器主要用来填补两个接口之间的差异,而装饰则是不须要更改接口,就能够新增功能的设计模式。





版权声明:本文博主原创文章。博客,未经同意不得转载。

原文地址:https://www.cnblogs.com/mengfanrong/p/4848193.html