標籤:class blog ext get 資料 string
鏈式生產環節裝配:
/// <summary> /// 資料,它會反覆接收工廠裡各個環節的加工 /// </summary> public class DataStream { public string Status { get; set; } }
/// <summary> /// 節點抽象類別,類比各種機器 /// </summary> /// <typeparam name="T"></typeparam> public abstract class MechineNode<T> : IMechine<T> where T : DataStream, new() { public IMechine<T> Next { get; set; } public T Data { get; set; } public abstract IMechine<T> Execute(); public IMechine<T> Append(IMechine<T> next) { this.Next = next; next.Data = this.Data; return next; } }
/// <summary> /// 機器節點1 /// </summary> /// <typeparam name="T"></typeparam> public sealed class Mechine1<T> : MechineNode<T> where T : DataStream, new() { public override IMechine<T> Execute() { this.Data.Status = "updated by mechine 1"; return this; } }
/// <summary> /// 機器節點2 /// </summary> /// <typeparam name="T"></typeparam> public sealed class Mechine2<T> : MechineNode<T> where T : DataStream, new() { public override IMechine<T> Execute() { this.Data.Status += ",updated by mechine 2"; return this; } }
下面是應用:
DataStream data = new DataStream(); IMechine<DataStream> mnode = new Mechine1<DataStream>(); mnode.Data = data; mnode.Execute() .Append(new Mechine2<DataStream>()).Execute() //.Append(new Mechine2<DataStream>()).Execute() //<---通過動態鏈式環節,自由組合各台機器的裝配順序 ;