开闭原则
(1)定义:对扩展开放,对修改关闭。通俗来讲就是软件实体应尽量在不修改原有代码的情况下进行拓展。
(2)实现分析:
抽象化是实现开闭原则的关键。我们通常通过提取事物的共性来进行抽象封闭,然后对事物的差异性提供接口进行扩展开放。
(3)示例:
在游戏中经常会出现让玩家选择角色进行游戏这个功能。
1)我们的原始方案可能如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Client : MonoBehaviour {
void Start () {
SelectSoldier();
}
void SelectSoldier()
{
Soldier soldier = new Soldier();
print("选择了"+ soldier.name);
}
void SelectMaster()
{
Master master = new Master();
print("选择了" + master.name);
}
}
public class Soldier: Character
{
public Soldier()
{
name = "Soldier";
}
}
public class Master : Character
{
public Master()
{
name = "Master";
}
}
2)这显然不符合我们的开闭原则,因为我们每次新增了某个角色,比如刺客,我们都要修改Client的代码。所以我们需要进行重构,如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Client : MonoBehaviour {
void Start () {
Select(new Soldier());
}
void Select(Character character)
{
print("选择了"+character.name);
}
}
public abstract class Character
{
public string name;
public Character()
{
name = "Character";
}
}
public class Soldier: Character
{
public Soldier()
{
name = "Soldier";
}
}
public class Master : Character
{
public Master()
{
name = "Master";
}
}
现在我们添加刺客,只需要新建该类让它继承人物类即可,并不需要修改原有代码。