适配器模式

 

概述:

将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。

 适配器实验:

实现一个类,该类有一个实数数组的排序的方法。现在想对一个整数排序,请利用适配器完成该实验。


类适配器模式:



  对象适配器模式:



1、Target接口:

声明所有需要的方法。

public interface Target

    {    //Target接口,声明所有需要的方法

         List<Double> RealNumSort(List<Double> realNumbers);//实数排列

         List<Int32> IntNumSort(List<Int32> realNumbers);//整数排列

    }

 

2、现存的实数排序类RealNumberSort类:

类中有实现实数排列的方法RealNumSort

public class RealNumberSort

    {

        public List<Double> RealNumSort(List<Double> realNumbers)

        {  //实现实数排列

            realNumbers.Sort();

            return realNumbers;

        }

    }

 

 3、类适配器模式类ClassAdapter

该类实现了Target接口的IntNumSort方法,还继承了RealNumberSort类的RealNumSort方法。

public class ClassAdapter : RealNumberSort,Target

    {   //实现了Target接口,并继承了实数排列类RealNumberSort的方法

 

        private RealNumberSort realNumber = new RealNumberSort();

        //实现Target接口的IntNumSort方法

        public List<Int32> IntNumSort(List<Int32> realNumbers) {

        List<Double> doubList = new List<Double>();

        foreach (Int32 num in realNumbers) {

            doubList.Add(Convert.ToDouble(num));

        }

        doubList = realNumber.RealNumSort(doubList);//继承了RealNumberSort类的RealNumSort方法

        List<Int32> intNums = new List<Int32>();

        foreach(Double doub in doubList) {

            intNums.Add(Convert.ToInt32(doub));

        }

        return intNums;

    }

    }

4、对象适配器模式:

该类实现了Target接口的IntNumSort方法,并调用了RealNumberSort类的RealNumSort方法。

 public class ObjectAdapter : Target

    {

        //对象适配器模式模式

        private RealNumberSort realNumber1 = new RealNumberSort();

 

        public List<Double>RealNumSort(List<Double> doubleNum)

        {  //调用RealNumberSortRealNumSort方法

            return realNumber1.RealNumSort(doubleNum);

        }

        public List<Int32> IntNumSort(List<Int32> intNumbers)

        {   //实现了TargetIntNumSort方法

            List<Double> doublelist = new List<Double>();

            foreach (Int32 ins in intNumbers) 

            {

                doublelist.Add(Convert.ToDouble(ins));

            }

            

            doublelist = RealNumSort(doublelist);//排序

            List<Int32> intNumbs = new List<int>();

            foreach (Double dbe in doublelist) 

            {

                intNumbs.Add(Convert.ToInt32(dbe));

            }

            return intNumbs;

        }

    }


类适配器模式和对象适配器模式的不同点在于类适配器模式继承已知类的方法,而对象适配器模式调用已知类的方法。对于一个被适配类中如果有大量的方法,使用类适配器模式会比较合适。如果被适配类有多个,由于很多面向对象编程语言中不支持多继承,所以使用对象适配器比较合适。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值