开发手册 欢迎您!
软件开发者资料库

.NET(C#) 设计模式六大原则 开闭原则

设计模式六大原则是单一职责原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则、开闭原则。它们不是要我们刻板的遵守,而是根据实际需要灵活运用。只要对它们的遵守程度在一个合理的范围内,努为做到一个良好的设计。本文主要介绍一下.NET(C#) 开闭原则。

开闭原则(Open Closed Principle)

开闭原则(Open-Closed Principle,OCP)是指一个软件实体(如类、模块和函数)应该对扩展开放,对修改关闭。如当一个模块需要修改的时,不应该直接修改源代码,这样有可能对现有的工作造成影响。应该通过拓展来实现新需求。

例如,

1)一般的反面设计实现

using System;namespace ConsoleApplication{    ///     /// 矩形(Shape.cs)    ///     public class Shape    {        private double _width;        private double _height;        private double _radius;        private string _name;        public Shape(string name, double width, double height)        {            this._width = width;            this._height = height;            _name = name;        }        public double AreaRectangle()        {            return _width * _height;        }        public void DisplayRectangle()        {            Console.WriteLine("{0} 长:{1},宽:{2},面积:{3}", _name, _width, _height, this.AreaRectangle());        }        public Shape(string name, double radius)        {            this._radius = radius;            this._name = name;        }        public double AreaCircle()        {            return Math.Round(Math.PI * _radius * _radius);        }        public void DisplayCircle()        {            Console.WriteLine("{0} 半径:{1},面积:{2}", _name, _radius, this.AreaCircle());        }    }    class Program    {        static void Main(string[] args)        {            Shape circle = new Shape("圆", 1);            circle.DisplayCircle();            Shape rectangle = new Shape("正方形", 100, 100);            rectangle.DisplayRectangle();            Console.ReadKey();        }    }}

2)开闭原则的实现

using System;namespace ConsoleApplication{    //Shape.cs    public abstract class Shape    {        protected string _name;        public Shape(string name)        {            this._name = name;        }        ///         /// 面积        ///         ///         public abstract double Area();        ///         /// 显示        ///         public abstract void Display();    }    ///     /// 矩形(Rectangle.cs)    ///     public class Rectangle : Shape    {        private double _width;        private double _height;        public Rectangle(string name, double width, double height)            : base(name)        {            this._width = width;            this._height = height;        }        public override double Area()        {            return _width * _height;        }        public override void Display()        {            Console.WriteLine("{0} 长:{1},宽:{2},面积:{3}", _name, _width, _height, this.Area());        }    }    ///     /// 圆形(Circle.cs)    ///     public class Circle : Shape    {        private double _radius;        public Circle(string name, double radius)            : base(name)        {            this._radius = radius;        }        public override double Area()        {            return Math.Round(Math.PI * _radius * _radius);        }        public override void Display()        {            Console.WriteLine("{0} 半径:{1},面积:{2}", _name, _radius, this.Area());        }    }    class Program    {        static void Main(string[] args)        {               Shape circle = new Circle("圆", 1);            circle.Display();            Shape rectangle = new Rectangle("正方形", 100, 100);            rectangle.Display();            Console.ReadKey();        }    }}