C#策略模式(Strategy Pattern)实例教程
作者:shichen2014 发布时间:2022-11-29 07:35:07
标签:C#,策略,模式
本文以一个简单的实例来说明C#策略模式的实现方法,分享给大家供大家参考。具体实现方法如下:
一般来说,当一个动作有多种实现方法,在实际使用时,需要根据不同情况选择某个方法执行动作,就可以考虑使用策略模式。
把动作抽象成接口,比如把玩球抽象成接口。代码如下:
public interface IBall
{
void Play();
}
有可能是玩足球、篮球、排球等,把这些球类抽象成实现接口的类。分别如下:
public class Football : IBall
{
public void Play()
{
Console.WriteLine("我喜欢足球");
}
}
public class Basketball : IBall
{
public void Play()
{
Console.WriteLine("我喜欢篮球");
}
}
public class Volleyball : IBall
{
public void Play()
{
Console.WriteLine("我喜欢排球");
}
}
还有一个类专门用来选择哪种球类,并执行接口方法:
public class SportsMan
{
private IBall ball;
public void SetHobby(IBall myBall)
{
ball = myBall;
}
public void StartPlay()
{
ball.Play();
}
}
客户端需要让用户作出选择,根据不同的选择实例化具体类:
class Program
{
static void Main(string[] args)
{
IBall ball = null;
SportsMan man = new SportsMan();
while (true)
{
Console.WriteLine("选择你喜欢的球类项目(1=足球, 2=篮球,3=排球)");
string input = Console.ReadLine();
switch (input)
{
case "1":
ball = new Football();
break;
case "2":
ball = new Basketball();
break;
case "3":
ball = new Volleyball();
break;
}
man.SetHobby(ball);
man.StartPlay();
}
}
}
程序运行结果如下图所示:
希望本文所述对大家的C#程序设计有所帮助。


猜你喜欢
- 简单介绍华为鸿蒙系统应用开发工具 DevEco Studio的安装和使用据说12月份鸿蒙系统会推出手机的SDK哦,作为一名普通的开发者,表示
- ChatGPT的基本介绍ChatGPT是一个用来进行自然语言处理任务的预训练模型。要使用ChatGPT,需要了解以下几点:理解预训练模型:预
- 使用@Value取值出现的问题在springBoot项目中我们一般会把一些路径或者资源写在配置文件中,方便管理。但是取得时候有可能会出现一些
- 手机权限检查和申请简介使用flutter进行app开发,一定会用到手机的部分权限,包括通知推送、定位、相册、存储、相机、麦克风等。而权限的检
- 本文实例讲述了Android中View的炸裂特效实现方法。分享给大家供大家参考,具体如下:前几天微博上被一个很优秀的 Android 开源组
- 1|1简介最近基于最新的Activiti7配置了SpringBoot2。简单上手使用了一番。发现市面上解决Activiti7的教程很少,采坑
- Java数组声明、创建、初始化一维数组的声明方式:type var[]; 或type[] var;声明数组时不能指定其长度(数组中元素的个数
- 最近在做代码优化时学习和研究了下JAVA多线程的使用,看了菜鸟们的见解后做了下总结。1、继承Thread类实现多线程继承Thread类的方法
- Command 常用属性CommText 要下达至数据源的命令CommanTimeout 出错等待时间Command 三种方法Execute
- 背景最近再做一个需求,就是对站点的一些事件进行埋点,说白了就是记录用户的访问行为。那么这些数据怎么保存呢,人家点一下保存一下?显然不合适,肯
- 如今,企业级应用程序的常见场景是同时支持HTTP和HTTPS两种协议,这篇文章考虑如何让Spring Boot应用程序同时支持HTTP和HT
- 小程序获取手机号,后端JAVA解密流程代码微信官方文档获取手机号流程地址,先看下最好方便理解下面步骤实现思路,步骤如下1.前端需先调用官方w
- 先给大家简单介绍下mybatisMyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的J
- 详解Java注解的实现与使用方法Java注解是java5版本发布的,其作用就是节省配置文件,增强代码可读性。在如今各种框架及开发中非常常见,
- Mapper类中存在名称相同的方法重载报错项目场景官网项目开发问题描述Mapper类中存在名称相同的方法重载报错为了省事,直接在mapper
- 1 本地调试介绍本地调试: 这里是指在开发环境中,部署了一整套的某个项目或者产品的服务,开发人员开发时,本地会起一个或多个服务,这些服务和开
- 引言:在Object基类中,有一个方法叫clone,产生一个前期对象的克隆,克隆对象是原对象的拷贝,由于引用类型的存在,有深克隆和浅克隆之分
- 一、常见游戏规则从扑克中每次取出4张牌。使用加减乘除,第一个能得出24者为赢。(其中,J代表11,Q代表12,K代表13,A代表1),按照要
- 通过View提供的方法获取高度方式有两种:1, 当前显示的view中直接获取当前view高宽2, 通过Activity的getWindow(
- Feign调用中的两种Header传参方式在Spring Cloud Netflix栈中,各个微服务都是以HTTP接口的形式暴露自身服务的,