简单的工厂模式

原创
2016/09/06 08:26
阅读数 41

以下是MainFrm文件内容

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace _23种设计模式
{
    public partial class MainFrm : Form
    {
        NameFactory nameFact = new NameFactory();
        public MainFrm()
        {
            
            InitializeComponent();
        }
        private void init()
        {
           
        }
        /// <summary>
        /// 转换按钮点击事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnConvert_Click(object sender, EventArgs e)
        {
            string name = txtBoxInput.Text;
            if (name!="")
            {
                Namer nm = nameFact.getName(txtBoxInput.Text);
                txtBoxFirst.Text = nm.getFrName();
                txtBoxLast.Text = nm.getLName();
            }
            else
            {
                MessageBox.Show("请输入需要测试的名字");
            }

        }
    }

  }

以下是基类Namer

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _23种设计模式
{
    /// <summary>
    /// 名字基类,其实可以设置为抽象类,多态实现各种情况
    /// </summary>
    public class Namer
    {
        protected string frName, lName;

        public string getFrName()
        {
            return frName;
        }
        public string getLName()
        {
            return lName;
        }
    }
}

以下是FirstLast名字模式,继承Namer

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _23种设计模式
{
    /// <summary>
    /// 名字-姓氏模式
    /// </summary>
    public class FirstLast:Namer
    {
        public FirstLast(string name)
        {
            int i = name.Trim().IndexOf(" ");
            if (i > 0)
            {
                frName = name.Substring(0, i).Trim();
                lName = name.Substring(i + 1).Trim();
            }
            else
            {
                frName = name;
                lName = "";
            }
        }
    }
}

以下是LastFirst模式,继承Namer

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _23种设计模式
{
    /// <summary>
    /// 姓氏-名字模式
    /// </summary>
    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 = "";
            }
        }
    }
}

以下是简单的工厂类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static _23种设计模式.Namer;

namespace _23种设计模式
{
    public class NameFactory
    {
        /// <summary>
        /// 简单的工厂方法,根据输入的字符串,返回相应的实例
        /// </summary>
        public NameFactory() { }

        public Namer getName(string name)
        {
            int i = name.IndexOf(",");
            if (i > 0)
            {
                return new LastFirst(name);
            }
            else
            {
                return new FirstLast(name);
            }
        }
    }
}

展开阅读全文
加载中

作者的其它热门文章

打赏
0
0 收藏
分享
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部