设计模式引导 上海

设计模式的概念已经在许多人的心里,有着高深莫测的伟大形象,当然国外的几个N人搞出了23个GOF设计模式,咱们就狠下心来学,说不定,某一天,我们CH人也能搞出几个更N的模式,不过重构好象重视的人不多,我建议设计模式和重构,可以交叉迭带里结合学习,毕竟这两本书是当世的惊世之作,好拉,废话少说,先来点简单点的,学习要循序渐进(江舟)
  下面举个简单的例子来说明一下简单工厂(不属于23“GOF”)
       在外国的名字里,有firstname,lastname之分,比如:MR JORN 或MR,JORN
                 注意两者之间用空格或“,“分开
   那么要对一个完整的名字进行分化,当然有很多简单的方法,我在这里只是举个例子,非小题大作嫌疑
    首先构造一个简单Base class
             public class Namer
     {
         protected string frName, lName;
         public string getFrname()
         {
             return frName;
         }
         public string getLname()
         {
             return lName;
         }
     }
然后派生两个方法类
      public class FirstFirst:Namer
     {
         public FirstFirst(string name)
         {
             int i = name.Trim().IndexOf(" ");
             if (i > 0)
             {
                 frName = name.Substring(0, i).Trim();
                 lName = name.Substring(i + 1).Trim();
             }
             else
             {
                 lName = name;
                 frName = "";
             }
         }
     }
    public class LastFirst : Namer
    {
        public LastFirst(string name)
        {
            int i = name.IndexOf(",");
            if (i > 0)
            {
                lName = name.Substring(0, i);
                frName = name.Substring(i + 1).Trim();

            }
            else
            {

                lName = name;
                frName = "";
            }
        }
    }
最后创建简单工厂
     public class NameFactory
    {
        public NameFactory() { }
        public Namer getName(string name)
        {
            int i = name.IndexOf(",");
            if (i > 0)
                return new LastFirst(name);
            else
                return new FirstFirst(name);
        }
    }

怎么使用这个简单工厂呢
           public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            NameFactory namefract = new NameFactory();
            Namer nm = namefract.getName(this.txtname.Text.Trim());
            this.txtfirstname.Text = nm.getFrname();
            this.txtlastname.Text = nm.getLname();
        }
    }
虽然简单,但给入门的,可以说是个很好的引导。。。。。

原文地址:https://www.cnblogs.com/luozhai714/p/681220.html