using UnityEngine;-------------------单一职责原则
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public abstract class Animal
{
private string animalName;
//只读属性
public string AnimalName => animalName;
protected Animal(string animalName)
{
this.animalName = animalName;
}
/// <summary>
/// 喊叫
/// </summary>
/// <returns>喊叫声音</returns>
public abstract string Shout();
}
public class Dog : Animal
{
public Dog(string animalName) : base(animalName)
{
}
public override string Shout()
{
return "汪汪汪";
}
}
public class Cat : Animal
{
public Cat(string animalName) : base(animalName)
{
}
public override string Shout()
{
return "喵喵喵";
}
}
public class SRP : MonoBehaviour
{
public static void NewAnimalShot(Animal animal)
{
Debug.Log(animal.Shout());
}
private void Start()
{
Animal ani=new Cat("小咪");
NewAnimalShot(ani);
}
}
using System;---------------------里氏替换原则
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameRole
{
}
public class CanAttackRole
{
public virtual void Attack()
{
Debug.Log("砍了一刀");
}
}
public class NormalMaster : CanAttackRole
{
public override void Attack()
{
base.Attack();
Debug.Log("又砍了一刀");
}
}
public class RiverCrab : GameRole
{
}
public class LSP : MonoBehaviour
{
private void Start()
{
CanAttackRole monster=new NormalMaster();
monster.Attack();
Debug.Log("--------------------------");
CanAttackRole monsterr=new CanAttackRole();
monsterr.Attack();
}
}
using System.Collections;-------------迪米特法则,最小知识原则
using System.Collections.Generic;
using LKP;
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].Desiption();
}
}
}
public class Class
{
public string ClassName;
public Student[] Students;
public Class(string className)
{
ClassName = className;
}
public Class(string className, Student[] students)
{
ClassName = className;
Students = students;
}
public void Desiption()
{
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);
Debug.Log(age);
Debug.Log(sex);
}
}
}
using System;--------------------依赖倒置原则
using System.Collections;
using System.Collections.Generic;
using DIP_Space;
using UnityEngine;
namespace DIP_Space
{
#region no DIP
public class Player
{
private AK47 _ak47;
void Firee()
{
_ak47.Fire();
}
}
public class AK47
{
public void Fire()
{
}
}
#endregion
#region use DIP
public class Game_UseWeapon
{
private Weapon currentWeapon;
public virtual void UseWeapon(Weapon weapon)
{
currentWeapon = weapon;
}
}
public class AIRole_UseWeapon : Game_UseWeapon
{
public int AINumber;
public override void UseWeapon(Weapon weapon)
{
base.UseWeapon(weapon);
weapon.Use();
}
}
public class GamePlayer : Game_UseWeapon
{
public string Name;
public GamePlayer(string name)
{
Name = name;
}
public override void UseWeapon(Weapon weapon)
{
base.UseWeapon(weapon);
weapon.Use();
}
}
public abstract class Weapon
{
public abstract void Use();
}
public class Gun : Weapon
{
public string name;
public Gun(string name)
{
this.name = name;
}
public override void Use()
{
Debug.Log("dadad");
}
}
public class ShotGun : Gun
{
public override void Use()
{
Debug.Log("bang");
}
public ShotGun(string name) : base(name)
{
}
}
#endregion
}
public class DIP : MonoBehaviour
{
private void Start()
{
Game_UseWeapon xiaoming=new GamePlayer("小明");
Gun ak47=new Gun("ak47");
Game_UseWeapon ai=new AIRole_UseWeapon();
Weapon shotgun=new ShotGun("shotgun");
RoleUseWeapon(ai, shotgun);
RoleUseWeapon(ai,ak47);
RoleUseWeapon(xiaoming,shotgun);
RoleUseWeapon(xiaoming,ak47);
}
public void RoleUseWeapon(Game_UseWeapon role, Weapon weapon)
{
role.UseWeapon(weapon);
}
}
六⼤设计原则单⼀职责原则(SRP:Single Responsibility Principle)单⼀职责原则,SRP⼜称单⼀功能原则,⾯向对象五个基本原则(SOLID)之⼀。它规定⼀个类应该只有⼀个发⽣变化的原因。该原则由罗伯特·C·⻢丁(Robert C. Martin)于《敏捷软件开发:原则、模式和实践》⼀书中给出的定义⼀个模块只负责⼀件事。⼀个类只负责⼀件事。⼀个⽅法只负责⼀件事。常⻅违背单⼀职责场景在⽅法中出现多个分⽀,分别去执⾏各⾃的逻辑,功能虽然可以实现。但如果需.