开封公司网站如何制作,北京公司招聘,广东省建筑信息网查询系统,软件商店oppo下载设计模式六大原则是单一职责原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则、开闭原则。它们不是要我们刻板的遵守#xff0c;而是根据实际需要灵活运用。只要对它们的遵守程度在一个合理的范围内#xff0c;努为做到一个良好的设计。本文主要介绍一下.NET(C#)…设计模式六大原则是单一职责原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则、开闭原则。它们不是要我们刻板的遵守而是根据实际需要灵活运用。只要对它们的遵守程度在一个合理的范围内努为做到一个良好的设计。本文主要介绍一下.NET(C#) 开闭原则。 开闭原则(Open Closed Principle)
开闭原则Open-Closed PrincipleOCP是指一个软件实体如类、模块和函数应该对扩展开放对修改关闭。如当一个模块需要修改的时不应该直接修改源代码这样有可能对现有的工作造成影响。应该通过拓展来实现新需求。
例如
1一般的反面设计实现
using System;
namespace ConsoleApplication
{/// summary/// 矩形(Shape.cs)/// /summarypublic 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.cspublic abstract class Shape{protected string _name;public Shape(string name){this._name name;}/// summary/// 面积/// /summary/// returns/returnspublic abstract double Area();/// summary/// 显示/// /summarypublic abstract void Display();}/// summary/// 矩形(Rectangle.cs)/// /summarypublic 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());}}/// summary/// 圆形(Circle.cs)/// /summarypublic 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();}}
}