熟练掌握和应用面向对象设计七大原则,是初中级工程师向高级/资深工程师进阶的一个必备技能。他可以大大的提升程序的可复用性和可维护性是重构代码的一大利器。
本人菜鸟一枚本面文章的出发点是1.加深个人印象。2.作为笔记记录。3.分享。文章中有描述的不到位或者不正确的地方各位大佬多多指出多多包涵。
使用设计模式的根本原因是适应变化,提升代码的复用率,扩展性,维护性和可读性。在设计时需要遵守以下七大原则:
⑴ 单一职责原则
⑵ 开放封闭原则
⑶ 依赖倒置原则
⑷ 里氏替换原则
⑸ 接口隔离原则
⑹ 组合复用原则
⑺ 迪米特原则
开放封闭原则
开闭原则强调的是一个软件实例(类,函数,模块等)应该对扩展开放,修改关闭。即每次有新的需求是应当添加新的代码来增强类型的行为,而不是修改原有代码(原则上是这样,看个人和项目需求)。
利用面向对象的继承特性,可以很好的对所需要增加的功能进行拓展。代码如下:
class Dog
{
public string name;
public int age;
public void Eat()
{
Console.WriteLine("吃狗粮");
}
}
假如需要在Dog类中加入新的行为“摇尾巴”Wagtail的功能,如果直接在原有Dog类上修改,代码如下:
class Dog
{
public string name;
public int age;
public void Eat()
{
Console.WriteLine("吃狗粮");
}
public void Wagtail()
{
Console.WriteLine("摇尾巴");
}
}
这样就会违背开放封闭原则,因为Dog类已经完成,如果需要增强功能,可以编写一个WagtailDog类继承自Dog,并在其中添加Wagtail的功能即可:
class Program
{
static void Main(string[] agrs)
{
WagtailDog wagtailDog = new WagtailDog();
wagtailDog.name = "摇尾巴的蛋蛋";
wagtailDog.age = 10;
wagtailDog.Eat();
wagtailDog.Wagtail();
}
}
class Dog
{
public string name;
public int age;
public void Eat()
{
Console.WriteLine("吃狗粮");
}
}
class WagtailDog : Dog
{
public void Wagtail()
{
Console.WriteLine("摇尾巴");
}
}