装饰器模式 £神魔★判官ぃ 2021-09-30 08:42 366阅读 0赞 一、基类 ![ContractedBlock.gif][] ![ExpandedBlockStart.gif][] /*---------------------------------------------------------------- * 作 者 :姜 彦 * 项目名称 :Decorator * 类 名 称 :FrameModel * 命名空间 :Decorator * CLR 版本 :4.0.30319.42000 * 创建时间 :2019/2/21 12:55:04 * 当前版本 :1.0.0.1 * My Email :jiangyan2008.521@gmail.com * jiangyan2008.521@qq.com * 描述说明: 装饰器原始积累 * * 修改历史: * ******************************************************************* * Copyright @ JiangYan 2019. All rights reserved. ******************************************************************* ------------------------------------------------------------------*/ using System; using System.Collections.Generic; namespace Decorator { /// <summary> /// FrameModel /// </summary> public abstract class FrameModel { #region 帧基本结构 /// <summary> /// 帧头 /// </summary> public static readonly byte FrameBegin = 0xFA; /// <summary> /// 命令ID /// </summary> public CommandID CmdID; /// <summary> /// 帧号 2 BYTES - (0 ~ 0xFEFE) /// </summary> public ushort iSeqNo; /// <summary> /// 是否需要应答 /// 00:不需要 or 上报帧 /// 01:需要 /// 02:应答帧 /// </summary> public byte IsReply; /// <summary> /// 命令的数据内容 /// </summary> public byte[] CmdData; /// <summary> /// 校验码 /// </summary> public byte LRC { get; set; } /// <summary> /// 帧尾 /// </summary> public static readonly byte FrameEnd = 0xFB; #endregion #region 帧其他属性 /// <summary> /// 该包的存活时间 /// </summary> public DateTime iLiveTime; /// <summary> /// 是否立即发送 /// </summary> public bool Immediate; public static bool IsEncode { get; set; } public static bool IsBigEndian = true; public int IConSendCnt { get; set; } #endregion #region 帧其他方法 /// <summary> /// 计算LRC校验值 /// </summary> /// <param name="datas"></param> /// <returns></returns> public static byte GetLRC(List<byte> datas) { byte Cs; Cs = 0; foreach (byte data in datas) Cs = (byte)(Cs + data); uint sub = 256 - (uint)Cs; Cs = (byte)sub; switch (IsEncode) { case false: byte[] ds; //ds = DataConverter.ToBytes(Cs); //Cs = ds[0]; break; default: break; } return Cs; } #endregion #region 抽象方法 /// <summary> /// 将通信帧转化为byte[] /// </summary> /// <returns></returns> public abstract byte[] ToByte(); /// <summary> /// 将通信帧转为字符串类型 /// </summary> /// <returns></returns> public abstract override string ToString(); #endregion } public enum CommandID { MSG_Connect, } } /*---------------------------------------------------------------- * 备 注 : * * * ******************************************************************* * Copyright @ JiangYan 2019. All rights reserved. ******************************************************************* ------------------------------------------------------------------*/ 基类 二、装饰器 ![ContractedBlock.gif][] ![ExpandedBlockStart.gif][] /*---------------------------------------------------------------- * 作 者 :姜 彦 * 项目名称 :Decorator * 类 名 称 :FrameModelDecodeDecorator * 命名空间 :Decorator * CLR 版本 :4.0.30319.42000 * 创建时间 :2019/2/21 12:57:26 * 当前版本 :1.0.0.1 * My Email :jiangyan2008.521@gmail.com * jiangyan2008.521@qq.com * 描述说明: 基类FrameModel的装饰器 * * 修改历史: * ******************************************************************* * Copyright @ JiangYan 2019. All rights reserved. ******************************************************************* ------------------------------------------------------------------*/ using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Decorator { /// <summary> /// FrameModelDecodeDecorator /// </summary> public class FrameModelDecodeDecorator:FrameModel { #region Construction public FrameModelDecodeDecorator() { } public FrameModelDecodeDecorator(FrameModel frameModel) { _FrameModel = frameModel; } #endregion #region Property #region Global Variable private FrameModel _FrameModel = null; #endregion #endregion #region Decorator of abstruct fuctions public override byte[] ToByte() { List<byte> packet = new List<byte>(); byte[] ccmd = BitConverter.GetBytes((ushort)_FrameModel.CmdID); byte[] iSeqNo = BitConverter.GetBytes(_FrameModel.iSeqNo); packet.Add(FrameBegin); packet.Add(ccmd[1]); packet.Add(ccmd[0]); packet.Add(iSeqNo[1]); packet.Add(iSeqNo[0]); packet.Add(_FrameModel.IsReply); for (int i = 0; i < _FrameModel.CmdData.Length; i++) { packet.Add(_FrameModel.CmdData[i]); } byte Cs = GetLRC(packet.Skip(1).Take(packet.Count - 1).ToList()); packet.Add(Cs); packet.Add(FrameEnd); return packet.ToArray(); } public override string ToString() { List<byte> packet = new List<byte>(); byte[] ccmd = BitConverter.GetBytes((ushort)_FrameModel.CmdID); byte[] iSeqNo = BitConverter.GetBytes((ushort)_FrameModel.iSeqNo); packet.Add(FrameBegin); packet.Add(ccmd[1]);//F0 packet.Add(ccmd[0]);//30 packet.Add(iSeqNo[1]);//01 packet.Add(iSeqNo[0]);//00 packet.Add(_FrameModel.IsReply); for (int i = 0; i < _FrameModel.CmdData.Length; i++) { packet.Add(_FrameModel.CmdData[i]); } byte Cs = GetLRC(packet.Skip(1).Take(packet.Count - 1).ToList()); packet.Add(Cs); packet.Add(FrameEnd); StringBuilder recBuffer16 = new StringBuilder(); string sendStr = string.Empty; byte[] sendBytes = packet.ToArray(); for (int i = 0; i < sendBytes.Length; i++) { recBuffer16.AppendFormat("{0:X2}" + " ", sendBytes[i]); } sendStr = recBuffer16.ToString(); return sendStr; } #endregion } } /*---------------------------------------------------------------- * 备 注 : * * * ******************************************************************* * Copyright @ JiangYan 2019. All rights reserved. ******************************************************************* ------------------------------------------------------------------*/ 装饰器 转载于:https://www.cnblogs.com/jiangyan219/articles/10412959.html [ContractedBlock.gif]: https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif [ExpandedBlockStart.gif]: /images/20210725/8eeed9ac572345ca96a345eab90244a6.png
相关 装饰器模式 装饰器模式就是一种通过组合方式实现扩展的设计模式,装饰器的核心思想是为已有实现类创建多个包装类,由这些新增的包装类完成新需求的扩展。 装饰器模 以你之姓@/ 2022年09月10日 08:18/ 0 赞/ 46 阅读
相关 装饰器模式 装饰器模式 <?php class BaseArticle{ protected $art = null; protected 我会带着你远行/ 2022年07月21日 01:28/ 0 赞/ 213 阅读
相关 装饰器模式 1 <?php 2 //装饰器模式-在不改变原有类的结构上,对类的功能那个作补充 3 4 //武器基类 5 abstract 秒速五厘米/ 2022年06月16日 00:00/ 0 赞/ 198 阅读
相关 装饰器模式 在学装饰器模式的时候,我想到了责任链模式中的级别这个概念,为什么这么说,在一个OA系统中我们会有不同级别(或者说权限范围不同)的管理员,首先我们要明确不同级别的管理员它也是管理 深碍√TFBOYSˉ_/ 2022年05月08日 06:14/ 0 赞/ 220 阅读
相关 装饰器模式 1、初识装饰器模式 装饰器模式,顾名思义,就是对已经存在的某些类进行装饰,以此来扩展一些功能。其结构图如下: ![watermark_type_ZmFuZ3poZW 小鱼儿/ 2022年04月24日 08:50/ 0 赞/ 246 阅读
相关 装饰器模式 ![Fpm6gbuGrUYHxqlnbEc-syPtY1Y3][] 什么是装饰器? 装饰器设计模式 > 装饰器模式(Decorator Pattern)允许向一个现有 ╰半橙微兮°/ 2022年04月21日 22:36/ 0 赞/ 236 阅读
相关 装饰器模式 一、基类 ![ContractedBlock.gif][] ![ExpandedBlockStart.gif][] /----------------------- £神魔★判官ぃ/ 2021年09月30日 08:42/ 0 赞/ 367 阅读
相关 装饰器模式 7.装饰器模式 ![70][] ![70 1][] class Program { static void Main( 拼搏现实的明天。/ 2021年09月16日 23:56/ 0 赞/ 334 阅读
相关 装饰器模式 ![5057999-ef364c6262961125.png][] image.png 意图: 动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模 超、凢脫俗/ 2021年09月12日 02:16/ 0 赞/ 374 阅读
相关 装饰器模式 饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。 这种... 小灰灰/ 2020年06月13日 05:56/ 0 赞/ 771 阅读
还没有评论,来说两句吧...