设计模式-命令
来源:互联网 发布:python cv2.threshold 编辑:程序博客网 时间:2024/06/05 20:58
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using 设计模式讲解.Command;namespace 设计模式讲解{ class Program { static void Main(string[] args) { /*命令模式,场景使用不同的方式实现多线程编程 命令:用户发送不同的命令,接收者执行对应的方法 接收者:负责接收命令并且执行命令 调用者:负责调用命令 */ List<int> caculateList = new List<int>(); for (int i = 0; i < 10; i++) { caculateList.Add(i); } MTReceiver _MTReceiver = new MTReceiver(); ThreadPoolCmd _ThreadPoolCmd = new ThreadPoolCmd(_MTReceiver); ParallelCmd _ParallelCmd = new ParallelCmd(_MTReceiver); TaskCmd _TaskCmd = new TaskCmd(_MTReceiver); Invoker _Invoker = new Invoker(); _Invoker.SetCommand(_ParallelCmd); _Invoker.ExcuteCommand(caculateList); Console.ReadKey(); } }}
MTReceiver
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Threading;namespace 设计模式讲解.Command{ public class MTReceiver { /// <summary> /// 线程池 /// </summary> /// <param name="caculateList"></param> public void ThreadPoolMethod(List<int> caculateList) { foreach (var item in caculateList) { ThreadPool.QueueUserWorkItem(new WaitCallback(t => { Console.WriteLine("线程池计算:{0},线程ID:{1}", t, Thread.CurrentThread.ManagedThreadId); }),item); } } /// <summary> /// 并行 /// </summary> /// <param name="caculateList"></param> public void ParallelMethod(List<int> caculateList) { Parallel.ForEach(caculateList, t => { Console.WriteLine("线程池计算:{0},线程ID:{1}", t, Thread.CurrentThread.ManagedThreadId); }); } /// <summary> /// 直接创建Task /// </summary> /// <param name="caculateList"></param> public void TaskMethod(List<int> caculateList) { Task[] tasks = new Task[caculateList.Count]; for (int i = 0; i < tasks.Length; i++) { tasks[i] = Task.Factory.StartNew(() => { Console.WriteLine("线程池计算:{0},线程ID:{1}", i, Thread.CurrentThread.ManagedThreadId); }); } Task.WaitAll(tasks); } }}
ICmd
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 设计模式讲解.Command{ public abstract class ICmd { protected MTReceiver _MTReceiver; public ICmd(MTReceiver _MTReceiver) { this._MTReceiver = _MTReceiver; } public abstract void Excute(List<int> caculateList); }}
ThreadPoolCmd
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 设计模式讲解.Command{ public class ThreadPoolCmd : ICmd { public ThreadPoolCmd(MTReceiver _MTReceiver) : base(_MTReceiver) { } public override void Excute(List<int> caculateList) { this._MTReceiver.ThreadPoolMethod(caculateList); } }}
ParallelCmd
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 设计模式讲解.Command{ public class ParallelCmd : ICmd { public ParallelCmd(MTReceiver _MTReceiver) : base(_MTReceiver) { } public override void Excute(List<int> caculateList) { this._MTReceiver.ParallelMethod(caculateList); } }}
TaskCmd
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 设计模式讲解.Command{ public class TaskCmd : ICmd { public TaskCmd(MTReceiver _MTReceiver) : base(_MTReceiver) { } public override void Excute(List<int> caculateList) { this._MTReceiver.TaskMethod(caculateList); } }}
Invoker
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 设计模式讲解.Command
{
public class Invoker
{
private ICmd cmd;
public void SetCommand(ICmd cmd)
{
this.cmd = cmd;
}
public void ExcuteCommand(List<int> caculateList)
{
cmd.Excute(caculateList);
}
}
}
0 0
- 设计模式---命令模式
- 设计模式-命令模式
- 设计模式:命令模式
- 设计模式:命令模式
- 设计模式:命令模式
- 设计模式 命令模式
- 设计模式--命令模式
- 设计模式---命令模式
- 设计模式- 命令模式
- 设计模式---命令模式
- 设计模式 - 命令模式
- 【设计模式】【命令模式】
- 设计模式---命令模式
- 设计模式 - 命令模式
- 设计模式:命令模式
- 设计模式 - 命令模式
- 设计模式-命令模式
- 设计模式---命令模式
- JS常用事件
- html5实现网页全屏
- OpenStack Tracker
- Ubuntu 下安装stardict
- MPLAB X XC8编译器件入门 基于PIC18F45K80
- 设计模式-命令
- Android 开发环境搭建(AndroidStudio)
- 解决 FIDDLER 在IE8中不识别 LOCALHOST 的问题
- HTTP 错误代码表
- 用大白话聊聊分布式系统
- C++形参中const char * 与 char * 的区别
- MyEclipse各种常用方法
- chart 图例点击事件
- 加法变乘法