笔记_接口隔离原则_胖接口

namespace Test {
    /*胖接口示例*/
    public class Program {
        static void Main(string[] args) {
            int[] nums1 = { 1, 2,3, 4, 5 };
            ArrayList nums2 = new ArrayList { 1, 2, 3, 4, 5 };
            var nums3 = new ReadOnlyCollection(nums1);
            Console.WriteLine(Sum(nums1));
            Console.WriteLine(Sum(nums2));
            Console.WriteLine(Sum(nums3));

            Console.Read();
        }

        //这个接口太胖了,需求比较多,实际我们需要的只是foreach迭代功能,所以IEnumerable足够
        //static int Sum(ICollection nums)  
        static int Sum(IEnumerable nums) {
            int sum = 0;
            foreach(var n in nums)
                sum += (int)n;
            return sum;
        }
    }

    public class ReadOnlyCollection : IEnumerable {
        private int[] _array;
        public ReadOnlyCollection(int[] array) {
            this._array = array;
        }
        public IEnumerator GetEnumerator() {
            return new Enumerator(this);
        }

        public class Enumerator : IEnumerator {
            private ReadOnlyCollection _collection;
            private int _head;
            public Enumerator(ReadOnlyCollection collection) {
                this._collection = collection;
                _head = -1;
            }
            public object Current {
                get {
                    object o = _collection._array[_head];
                    return o;
                }
            }
            public bool MoveNext() {
                if(++_head < _collection._array.Length) {
                    return true;
                }
                else {
                    return false;
                }
            }
            public void Reset() {
                _head = -1;
            }
        }
    }
}

猜你喜欢

转载自www.cnblogs.com/hansel520/p/12141649.html