案例背景
如果一个项目需求 游戏设计 一个武士 可以使用的武器 有 刀 枪 弓箭 并且可以随时切换使用 那么我们这个程序要怎么写?
我们可以写成这样 这个代码也能实现功能 但是如果我们要增加 斧头怎么办? 或者 枪不符合武士的身份要被去除掉 是不是就要修改代码 这违反了 类的开闭原则
public class warrior
{
public warrior()
{
}
public string Use(string wepən)
{
string ms=null;
if (wepən.Equals("刀"))
{
ms="使用小刀随意的刮";
}
else if (wepən.Equals("枪"))
{
ms= "随意的小枪随意的射";
}
else if (wepən.Equals("弓箭"))
{
ms = "要你命三千嗖嗖嗖嗖";
}
return ms;
}
}
好来说策略模式
这个图就是策略模式 那我们怎么使用到场景那
武器这类 是抽象类 或者接口 那么 什么时候用接口 什么时候用抽象类?
抽象类:如果实现的子类 有强烈的父子关系 就使用抽象类(比如 黑人 白人 黄种人 都属于人)
接口类:如果实现的子类 和父类并没有父子关系 只有功能相同 就用接口 (比如 门 车 锁 不属于一类 但是它们都有防盗功能)
那么武器用什么 武器用的就是接口
代码
弓箭类
class bow:Iwepən
{
public string use()
{
return "这是弓箭 射射~";
}
}
刀类
class knife : Iwepən
{
public string use()
{
return "这是刀";
}
}
枪类
class rifle:Iwepən
{
public string use()
{
return "这是枪 砰砰砰";
}
}
武器接口
public interface Iwepən
{
string use();
}
武士类
public class warrior
{
private Iwepən Iw;
public warrior(Iwepən wp)
{
this.Iw = wp;
}
public string use()
{
return Iw.use();
}
}
可以通过 new warrior (new 各种类)
warrior wa = new warrior( new bow());
MessageBox.Show(wa.use());
这样我们 如果要增加 手雷 就增加一个子类 结继承武器
我们就可以在前台调用这个了 是不是很方便 很扩展