定义:
一个对象应该对其他对象保持最少的了解,只与直接朋友进行通信
类与类的关系
纵向:继承关系
横向:聚合、组合、关联、依赖
⾼内聚、低耦合
降低耦合度的方法
降低耦合度的⽅法
1. 少使⽤类的继承,多⽤接⼝隐藏实现的细节。
2. 模块的功能化分尽可能的单⼀,道理也很简单,功能单⼀的模块供其它模块调⽤的机会就少。(其实这是⾼内 聚的⼀种说法,⾼内聚低耦合⼀般同时出现)。
3. 遵循⼀个定义只在⼀个地⽅出现。
4. 少使⽤全局变量。
5. 类属性和⽅法的声明少⽤public,多⽤private关键字。
6. 多⽤设计模式,⽐如采⽤MVC的设计模式就可以降低界⾯与业务逻辑的耦合度。
7. 尽量不⽤“硬编码”的⽅式写程序,同时也尽量避免直接⽤SQL语句操作数据库。
8. 最后当然就是避免直接操作或调⽤其它模块或类(内容耦合);如果模块间必须存在耦合,原则上尽量使⽤数据耦合,少⽤控制耦合,限制公共耦合的范围,避免使⽤内容耦合
增强内聚度的方法
增强内聚度⽅法
1. 模块只对外暴露最⼩限度的接⼝,形成最低的依赖关系。
2. 只要对外接⼝不变,模块内部的修改,就不得影响其他模块。
3. 删除⼀个模块,应当只影响有依赖关系的其他模块,⽽不应该影响其他⽆关部分。 通过降低访问修饰符权限,减少联系,减少耦合
using UnityEngine;
namespace LKP
{
public class PlayerController
{
public PlayerController()
{
Debug.Log(Player.currentPlayer);
}
}
public class PlayerAnimation
{
public PlayerAnimation()
{
Debug.Log(Player.currentPlayer);
}
}
public class PlayerNavigation
{
public PlayerNavigation()
{
Debug.Log(Player.currentPlayer);
}
}
public class Player
{
public static Player currentPlayer;
public Monster Monster;
public void Attack(Monster monster)
{
Debug.Log(monster.experance);
}
}
public class Monster
{
public float experance;
}
public class RiverCrab : Monster
{
}
public class LKP : MonoBehaviour
{
}
}
namespace LKP_Ex
{
public class School
{
public string schoolName;
public Class[] classes;
public School(string schoolName, Class[] classes)
{
this.schoolName = schoolName;
this.classes = classes;
}
public void NewDescription()
{
for (int i = 0; i < classes.Length; i++)
{
classes[i].Description();
}
}
public void Description()
{
Debug.Log("学校名称:" + schoolName);
for (int i = 0; i < classes.Length; i++)
{
Debug.Log("班级名称:" + classes[i].className);
for (int j = 0; j < classes[i].students.Length; j++)
{
Debug.Log(classes[i].students[j].name);
Debug.Log(classes[i].students[j].age);
}
}
}
}
public class Class
{
public string className;
public Student[] students;
public Class(string className, Student[] students)
{
this.className = className;
this.students = students;
}
public void Description()
{
for (int i = 0; i < students.Length; i++)
{
students[i].Description();
}
}
}
public class Student
{
public string name;
public int age;
public char sex;
public Student(string name, int age,char sex)
{
this.name = name;
this.age = age;
this.sex = sex;
}
public void Description()
{
Debug.Log("Name:" + name);
Debug.Log("Age:" + age);
Debug.Log("Sex:" + sex);
}
}
}