策略模式示例 -- C#语言
时间:2019-11-20
本文章向大家介绍策略模式示例 -- C#语言,主要包括策略模式示例 -- C#语言使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
定义
- 定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
UML图
代码
- 为了方便写到了一起,实际开发中类要单独页面写。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Pattern_Duck
{
class Program
{
static void Main(string[] args)
{
Duck mallard = new MallardDuck();
mallard.PerformFly();
mallard.PerformQuack();
mallard.Display();
Console.WriteLine("___________");
Duck model = new ModelDuck();
model.PerformFly();
model.SetIFlyBehavior(new FlyRocketPowered());
model.PerformFly();
Console.ReadKey();
}
}
//抽象基类:鸭子
public abstract class Duck
{
//为行为类型接口类型声明两个引用变量
public IFlyBehavior flyBehavior;
public IQuackBehavior quackBehavior;
public Duck()
{
}
public abstract void Display();
public void PerformFly()
{
flyBehavior.Fly();
}
public void PerformQuack()
{
quackBehavior.Quack();
}
public void Swim()
{
Console.WriteLine("All ducks float, even decoys!");
}
//设定方法,可以在鸭子子类中通过设定方法来设定鸭子的行为,而不是在鸭子的构造器内实例化
public void SetIFlyBehavior(IFlyBehavior fb)
{
flyBehavior = fb;
}
public void SetIQuackBehavior(IQuackBehavior qb)
{
quackBehavior = qb;
}
}
//行为飞的接口
public interface IFlyBehavior
{
void Fly();
}
//继承飞的接口的飞的类1
public class FlyWithWings : IFlyBehavior
{
public void Fly()
{
Console.WriteLine("I'm flying!");
}
}
//继承飞的接口的飞的类2
public class FlyNoWay : IFlyBehavior
{
public void Fly()
{
Console.WriteLine("I can't fly!");
}
}
//继承飞的接口的飞的类3
public class FlyRocketPowered : IFlyBehavior
{
public void Fly()
{
Console.WriteLine("I'm flying with a rocket!");
}
}
//行为叫的接口
public interface IQuackBehavior
{
void Quack();
}
//叫的类1
public class SQuack : IQuackBehavior
{
public void Quack()
{
Console.WriteLine("Quack!");
}
}
//叫的类2
public class MuteQuack : IQuackBehavior
{
public void Quack()
{
Console.WriteLine("Silence");
}
}
//叫的类3
public class Squeak : IQuackBehavior
{
public void Quack()
{
Console.WriteLine("Squeak");
}
}
//继承鸭子类的绿头鸭类
public class MallardDuck : Duck
{
public MallardDuck()
{
quackBehavior = new SQuack();
flyBehavior = new FlyWithWings();
}
public override void Display()
{
Console.WriteLine("I'm a real Mallard duck!");
}
}
//继承鸭子类的模型鸭类
public class ModelDuck : Duck
{
public ModelDuck()
{
flyBehavior = new FlyNoWay();
quackBehavior = new SQuack();
}
public override void Display()
{
Console.WriteLine("I'm a model duck!");
}
}
}
原文地址:https://www.cnblogs.com/ChaoJieLiu/p/11897826.html
- 桶式移位器
- 【开源】QuickPager ASP.NET2.0分页控件V2.0.0.7 增加了一个js函数的分页方式。
- FireEye报告:揭露新型工控系统恶意软件TRITON
- 【开源】QuickPager ASP.NET2.0分页控件V2.0.0.6 修改了几个小bug,使用演示。
- Invoke-PSImage:将PS脚本隐藏进PNG像素中并用一行指令去执行它
- linux的内存清理相关知识!
- 一个页面搞定几乎所有的列表需求的实现思路和一点代码。
- 实现 Table 的行交替颜色、选中行变色的一种方法。演示+源码
- 【知识】使用Python来学习数据科学的完整教程
- 【开源】QuickPager ASP.NET2.0分页控件V2.0.0.4 增加了几个分页算法
- 虚拟时钟
- 正弦函数仿真
- 《你必须知道的.net》读书笔记 004 —— 1.4 多态的艺术
- 桶形移位寄存器(二)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Laravel 微信小程序后端搭建步骤详解
- Laravel使用swoole实现websocket主动消息推送的方法介绍
- Laravel框架Eloquent ORM删除数据操作示例
- PHP常用函数之base64图片上传功能详解
- laravel-admin 实现在指定的相册下添加照片
- Laravel框架Eloquent ORM修改数据操作示例
- PHP常用函数之格式化时间操作示例
- 在phpstudy集成环境下的nginx服务器下配置url重写
- 关于laravel-admin ueditor 集成并解决刷新的问题
- PHP常用函数之根据生日计算年龄功能示例
- Laravel 之url参数,获取路由参数的例子
- PHP call_user_func和call_user_func_array函数的简单理解与应用分析
- PHP常用函数之获取汉字首字母功能示例
- 浅谈laravel-admin form中的数据,在提交后,保存前,获取并进行编辑
- tp5 实现列表数据根据状态排序