标签:private add href 说明 客户 改变 不可 抽象 一个
六中设计原则
原则一:单一设计原则
定义:一个类只负责一项职责(注意 : 这里的类不光指类,也适用于方法和接口,比如我们常说的一个方法实现一个功能)
举例说明:动物吃东西的场景
现在:来了一只老虎
过会又来只蚯蚓
好处:类的复杂度降低、可读性提高、可维护性提高、扩展性提高、降低了变更引起的风险
原则二:迪米特法则
定义: 迪米特法则也叫做最少知识原则(Least Knowledge Principle,LKP),即一个对象应该对其他对象有最少的了解,也就是说一个类要对自己需要耦合或者调用的类知道的最少。我只知道你有多少public方法可以供我调用,而其他的一切都与我无关。
举一个例子:学校领导老师点名,老师让体育委员清点人数
class Program
{
static void Main(string[] args)
{
Console.WriteLine("周末放假,学校领导命令老师去点名.....");
List<student> students = new List<student>();
for (int i = 0; i < 20; i++)
{
students.Add(new student());
}
teacher teacher = new teacher();
teacher.command(new studentLeader(students));
Console.ReadKey();
}
}
class teacher
{
public void command(studentLeader StudentLeader)
{
Console.WriteLine("老师接到命令,委托体育委员清点人数......");
StudentLeader.counts();
}
}
class studentLeader
{
private List<student> students;
public studentLeader(List<student> students)
{
this.students = students;
}
public void counts()
{
Console.WriteLine("体育委员开始清点人数......");
int counts = students.Count();
Console.WriteLine("体育委员清点结束,人数为" + counts);
}
}
class student { }
好处:降低类与类之间的耦合
迪米特法则的核心观念就是类间解耦,最终可能产生的结果就是会产生了大量的中转类。为了把解耦做到极致导致实现一个业务逻辑的实现跳转了很多类,这也是不可取的做法。因此根据实际权衡利弊才是重要的
(继承作为面向对象三大特性之一,在给程序设计带来巨大便利的同时,也带来了弊端。比如使用继承会给程序带来侵入性,程序的可移植性降低,增加了对象间的耦合性,如果一个类被其他的类所继承,则当这个类需要修改时,必须考虑到所有的子类,并且父类修改后,所有涉及到子类的功能都有可能会产生故障。)
原则三:里氏替换原则
里氏替换原则简单易懂一点的定义就是:只要父类出现的地方子类就可以出现,且替换成子类也不会出现任何错误或者异常。(但是反过来,有子类出现的地方,父类不一定可以适用)。
. 里氏替换原则是为继承定义了四个规范
① 子类必须完全实现父类的方法
② 子类可以有自己的个性
③覆盖或者实现父类的方法时输入参数可以被放大
④复写或实现父类的方法时返回值可以缩小。
原则四:依赖倒置原则
定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。
问题由来:类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成。这种场景下,类A一般是高层模块,负责复杂的业务逻辑;类B和类C是低层模块,负责基本的原子操作;假如修改类A,会给程序带来不必要的风险。
解决方案:将类A修改为依赖接口I,类B和类C各自实现接口I,类A通过接口I间接与类B或者类C发生联系,则会大大降低修改类A的几率。
定义:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。
问题由来:类A通过接口I依赖类B,类C通过接口I依赖类D,如果接口I对于类A和类B来说不是最小接口,则类B和类D必须去实现他们不需要的方法。
解决方案:将臃肿的接口I拆分为独立的几个接口,类A和类C分别与他们需要的接口建立依赖关系。也就是采用接口隔离原则。
举例来说明接口隔离原则:
原则六: 开闭原则
具体的定义是:一个软件实体,比如类,模块,函数应该对扩展开放,对修改关闭。说的通熟易懂一些就是一个软件实体应该通过扩展来实现变化,而不是通过修改已有的代码来实现改变。
标签:private add href 说明 客户 改变 不可 抽象 一个
原文地址:https://www.cnblogs.com/zxnew/p/9530058.html