• builderbags.cs


    using System;
      using System.Diagnostics;
      using System.IO;
      using System.Threading;

      namespace BuilderPattern {
        //  Builder Pattern    D-J Miller and Judith Bishop Sept 2007

        // Abstract Factory : Builder Implementation
        interface IBuilder<Brand>
          where Brand : IBrand {
          IBag CreateBag();
        }

        // Abstract Factory now the Builder
        class Builder<Brand> : IBuilder<Brand>
          where Brand : IBrand, new() {

          Brand myBrand;
          public Builder() {
            myBrand = new Brand();
          }

          public IBag CreateBag() {
            return myBrand.CreateBag();
          }
        }

        // Product 1
        interface IBag {
          string Properties { get; set; }
        }

        // Concrete Product 1
        class Bag :IBag {
          public string Properties { get; set; }
        }

        // Directors
        interface IBrand {
          IBag CreateBag();
        }

        class Gucci : IBrand {
          public IBag CreateBag() {
            Bag b = new Bag();
            Program.DoWork("Cut Leather", 250);
            Program.DoWork("Sew leather", 1000);
            b.Properties += "Leather";
            Program.DoWork("Create Lining", 500);
            Program.DoWork("Attach Lining", 1000);
            b.Properties += " lined";
            Program.DoWork("Add Label", 250);
            b.Properties += " with label";
            return b;
          }
        }

        class Poochy : IBrand {
          public IBag CreateBag() {
            Bag b = new Bag();
            Program.DoWork("Hire cheap labour", 200);
            Program.DoWork("Cut Plastic", 125);
            Program.DoWork("Sew Plastic", 500);
            b.Properties += "Plastic";
            Program.DoWork("Add Label", 100);
            b.Properties += " with label";
            return b;
          }
        }

        class Client<Brand>
          where Brand : IBrand, new() {
            
          public void ClientMain() { //IFactory<Brand> factory)
            IBuilder<Brand> factory = new Builder<Brand>();

            DateTime date = DateTime.Now;
            Console.WriteLine("I want to buy a bag!");
            IBag bag = factory.CreateBag();

            Console.WriteLine("I got my Bag which took " + DateTime.Now.Subtract(date).TotalSeconds * 5 + " days");
            Console.WriteLine("  with the following properties " + bag.Properties+"\n");
          }
        }

        static class Program {
        
          static void Main() {
            // Call Client twice
            new Client<Poochy>().ClientMain();
            new Client<Gucci>().ClientMain();
          }

          public static void DoWork(string workitem, int time) {
            Console.Write("" + workitem + ": 0%");
            Thread.Sleep(time);
            Console.Write("....25%");
            Thread.Sleep(time);
            Console.Write("....50%");
            Thread.Sleep(time);
            Console.WriteLine("....100%");
          }
        }
      }
    /*Output
    I want to buy a bag!
    Hire cheap labour: 0%....25%....50%....100%
    Cut Plastic: 0%....25%....50%....100%
    Sew Plastic: 0%....25%....50%....100%
    Add Label: 0%....25%....50%....100%
    I got my Bag which took 14.02016 days
      with the following properties Plastic with label

    I want to buy a bag!
    Cut Leather: 0%....25%....50%....100%
    Sew leather: 0%....25%....50%....100%
    Create Lining: 0%....25%....50%....100%
    Attach Lining: 0%....25%....50%....100%
    Add Label: 0%....25%....50%....100%
    I got my Bag which took 45.0648 days
      with the following properties Leather lined with label

    */
  • 相关阅读:
    Cookie操作
    C# 操作Cookie类
    面向对象之struct
    高薪程序员都避开了那些坑【安晓辉】
    [转]C#之反射
    [转]正则表达式相关:C# 抓取网页类(获取网页中所有信息)
    membership 在web.config中配置信息
    面向对象之virtual
    面向对象之多态
    JAVA面向对象 接口
  • 原文地址:https://www.cnblogs.com/shihao/p/2506759.html
Copyright © 2020-2023  润新知