适配器设计模式的两种实现方法

结构型设计模式之适配器设计模式的两种实现方法

目录

一、适配器模式的概念和使用介绍
二、通过创建适配器类继承第三方模块并实现接口方式
三、

一、适配器模式的概念和使用介绍

1、问题引入:

  • 生活中的适配器: 比如电脑的各种适配器,手机充电器等
  • 软件中: 做项目的时候,有时会需要单独设计或者买一个模块集成到项目中。

模块获取有两种方式:
第一种 是定制,给出要求;
第二种 是:直接购入就是非定制的,这种情况下出现第三方的接口和我们需要的接口不同是很正常的,但是我们又得集成到项目中,就得做适配

2、适配器模式的概念: 将一个类的“接口”转换为需要的“另一个接口”,此处接口是广义概念

二、通过创建适配器类继承第三方模块并实现接口方式

1、测试步骤介绍:

  • 创建一个AdapterDesignPattern控制台
  • 创建IbizLogicalInterface接口类
  • 基于IbizLogicalInterface类实现接口ABizLogical、BBizLogical
  • 创建一个类CBizLogical模拟第三方模块,用来测试适配器模式
  • 创建一个适配器类AdapterBaseClass继承CBizLogical同时实现接口
  • program类内测试三个接口实现类的实现结果

2、补充:

  • 在适配器模式 实现过程中,在实现常规业务的同时,还可以增加我们想要的东西,这点其实就是AOP思想的一个体系
  • 总之就是将不符合需要的接口做二次包装(可增加其他业务),对调用者没有任何影响

3、代码实现步骤:

(1)、根据步骤创建所需类
在这里插入图片描述
(2)、接口IbizLogicalInterface代码:

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

namespace AdapterDesignPattern
{
    public interface IbizLogicalInterface
    {
        void DoLogical1<T1, T2>(T1 t1 ,T2 t2 );
        void DoLogical2<T1, T2>(T1 t1, T2 t2);
        void DoLogical3<T1, T2>(T1 t1, T2 t2);
        //还可以继续添加其他接口
    }
}

(3)、接口实现ABizLogical代码:

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

namespace AdapterDesignPattern
{
    public class ABizLogical : IbizLogicalInterface
    {
        public void DoLogical1<T1, T2>(T1 t1, T2 t2)
        {
            Console.WriteLine("A业务实现接口,执行方法【1】");
        }

        public void DoLogical2<T1, T2>(T1 t1, T2 t2)
        {
            Console.WriteLine("A业务实现接口,执行方法【2】2");
        }

        public void DoLogical3<T1, T2>(T1 t1, T2 t2)
        {
            Console.WriteLine("A业务实现接口,执行方法【3】");
        }
    }
}

(4)、接口实现BBizLogical代码:

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

namespace AdapterDesignPattern
{
    public class BBizLogical : IbizLogicalInterface
    {
        public void DoLogical1<T1, T2>(T1 t1, T2 t2)
        {
            Console.WriteLine("B业务实现接口,执行方法【1】");
        }

        public void DoLogical2<T1, T2>(T1 t1, T2 t2)
        {
            Console.WriteLine("B业务实现接口,执行方法【2】");
        }

        public void DoLogical3<T1, T2>(T1 t1, T2 t2)
        {
            Console.WriteLine("B业务实现接口,执行方法【3】");
        }
    }
}

(5)、模仿第三方模块CBizLogical的代码:

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

namespace AdapterDesignPattern
{
    public class CBizLogical
    {
        public void ExcuteMethod1()
        {
            Console.WriteLine("第三方业务或模块实现【1】");
        }

        public void ExcuteMethod2()
        {
            Console.WriteLine("第三方业务或模块实现【2】");
        }

        public void ExcuteMethod3()
        {
            Console.WriteLine("第三方业务或模块实现【3】");
        }

        public void ExcuteMethod4()
        {
            Console.WriteLine("第三方业务或模块实现【4】");
        }
    }
}

(6)、用来做适配的适配器类AdapterBaseClass的代码:

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

namespace AdapterDesignPattern
{
    public class AdapterBaseClass : CBizLogical, IbizLogicalInterface
    {
        public void DoLogical1<T1, T2>(T1 t1, T2 t2)
        {
            //在这个地方可以添加需要的业务逻辑
            base.ExcuteMethod1();//对接口做了一层包装,就变成了我们需要的接口
        }

        public void DoLogical2<T1, T2>(T1 t1, T2 t2)
        {
            //还可以在这里添加我们想要加的业务逻辑
            base.ExcuteMethod2();
            base.ExcuteMethod3();//可以调用多个方法
        }

        public void DoLogical3<T1, T2>(T1 t1, T2 t2)
        {
            //还可以在这里添加我们想要加的业务逻辑
            base.ExcuteMethod4();//base代表CBizLogical第三方我们需要是配的模块
        }
    }
}

(7)、测试方法Program的代码:

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

namespace AdapterDesignPattern
{
    class Program
    {
        static void Main(string[] args)
        {
            //调用接口实现类ABizLogical
            IbizLogicalInterface aLogical1 = new ABizLogical();
            aLogical1.DoLogical1<string, int>("",1);
            aLogical1.DoLogical2<string, int>("", 1);
            aLogical1.DoLogical3<string, int>("", 1);
            Console.WriteLine("-------------------------------------------------------");
            //调用接口实现类BBizLogical
            IbizLogicalInterface bLogical1 = new BBizLogical();
            bLogical1.DoLogical1<int, int>(1, 2);
            bLogical1.DoLogical2<int, int>(1, 2);
            bLogical1.DoLogical3<int, int>(1, 2);
            Console.WriteLine("-------------------------------------------------------");
            //调用第三方不符合接口规范,但是经过适配器适配的CBizLogical
            //IbizLogicalInterface cLogical = new CBizLogical();//不能这样做,因为是第三方模块,不符合接口标准,需要适配
            IbizLogicalInterface cLogical1 = new AdapterBaseClass();
            cLogical1.DoLogical1<int, int>(1, 3);
            cLogical1.DoLogical2<int, int>(1, 3);
            cLogical1.DoLogical3<int, int>(1, 3);

            Console.ReadKey();
        }
    }
}

(8)、测试结果如图:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/y20_20/article/details/93032490
今日推荐