设计模式 策略模式

时间:2023-03-01 13:16:36


案例背景

如果一个项目需求 游戏设计 一个武士  可以使用的武器 有 刀 枪 弓箭 并且可以随时切换使用 那么我们这个程序要怎么写?

我们可以写成这样  这个代码也能实现功能 但是如果我们要增加 斧头怎么办? 或者 枪不符合武士的身份要被去除掉 是不是就要修改代码 这违反了 类的开闭原则

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());

 

这样我们 如果要增加 手雷 就增加一个子类 结继承武器

我们就可以在前台调用这个了  是不是很方便  很扩展