首页 > 其他分享 >设计模式 策略模式

设计模式 策略模式

时间:2023-03-01 15:33:18浏览次数:32  
标签:warrior use return string 模式 Iwep 设计模式 public 策略


案例背景

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

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

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;
}
}

 

好来说策略模式

这个图就是策略模式 那我们怎么使用到场景那

设计模式 策略模式_子类

 

 

设计模式 策略模式_设计模式_02

武器这类 是抽象类 或者接口  那么 什么时候用接口 什么时候用抽象类?

抽象类:如果实现的子类 有强烈的父子关系 就使用抽象类(比如 黑人 白人 黄种人 都属于人) 

接口类:如果实现的子类 和父类并没有父子关系 只有功能相同 就用接口 (比如 门 车 锁 不属于一类 但是它们都有防盗功能)

那么武器用什么 武器用的就是接口

代码

弓箭类

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

 

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

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

标签:warrior,use,return,string,模式,Iwep,设计模式,public,策略
From: https://blog.51cto.com/u_14483572/6092657

相关文章

  • 模拟SPI 4种模式
    https://blog.csdn.net/u012846795/article/details/1238614131/*CPOL=0,CPHA=0,MSBfirst*/2uint8_tSOFT_SPI_RW_MODE0(uint8_twrite_dat)3{......
  • k8s通过sidecar模式收集pod的容器日志至ELK
    架构:已完成的部署1、ES集群及kibana部署​​https://blog.51cto.com/yht1990/6080981​​2、kafaka+zookeeper集群​​https://blog.51cto.com/yht1990/6081518​​准备side......
  • 23种设计模式一:单例模式
    1、说明1.1定义单例模式(SingletonPattern)是Java中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的......
  • LVS负载均衡DR模式
    拓扑图:推荐步骤:Firewalld防火墙配置IP地址,LVS调度器配置IP地址修改内核参数,配置web服务器IP地址,配置NFS共享存储服务器IP地址,客户端配置IP地址搭建共享存储配置允许web......
  • go options 模式
    ...函数式选项模式的使用场景有哪些呢:我们一般用来配置一些基础的服务配置,比如MySQL,Redis,Kafka的配置,很多可选参数,可以方便动态灵活的配置想要配置的参数。https://zhuan......
  • 20-责任链模式
    20-责任链模式概念责任链模式(ChainofResponsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连城一条链,并沿着这条链传......
  • 设计模式&业务场景
    目录单例工厂观察者模板方法责任链策略单例工厂观察者模板方法责任链策略......
  • 路飞:路飞后台配置之封装logger、路飞后台配置之封装全局异常、路飞台配置之二次封装re
    目录一、路飞后台配置之封装logger配置步骤步骤一:复制代码(之前学过的日志字典)到配置文件中(dev.py)步骤二:在utils新建common_logger.py,写入下方代码,得到日志对象步骤三:在......
  • JavaScript中单例模式这样用
    如果希望自己的代码更优雅、可维护性更高以及更简洁,往往离不开设计模式这一解决方案。在JS设计模式中,最核心的思想:封装变化(将变与不变分离,确保变化的部分灵活,不变的部分......
  • mybatis-plus主键生成策略(实体类配置,数据库插入数据自动生成id)
    转载:MyBatisplus--ActiveRecord(AR)_mybatisplusidtype.auto_憨憨浩浩的博客-CSDN博客0.auto:自动增长(mysql,sqlserver)1.none:没有主键2.input:手动输入3.id_worker:实体......