C# 工厂模式 望大家 赐教

bao605424093 2013-03-18 03:12:45
以前写代码 只考虑 方法实行,这几天开始研究模式,第一个模式 是工厂模式,下面是一个小例子,请大家看看如何改进,能够使它达到更大的可扩展性和尽量少的修改量。
代码如下:
using System;
using System.Collections.Generic;
using System.Text;

//工厂模式:new的多态跟封装,(抽象工厂,具体工厂,抽象产品,具体产品)
namespace FactoryText
{
abstract class Produce
{
public abstract void productName();
}

//具体产品
class productA : Produce
{
public override void productName()
{
Console.WriteLine("product A");
}
}

class productB : Produce
{
public override void productName()
{
Console.WriteLine("product B");
}
}

//抽象工厂
abstract class abstructFactory
{
public abstract Produce produce(string produceType);
}

//具体工厂
class Factory1 : abstructFactory
{
public override Produce produce(string produceType)
{
Produce result = null;
try
{
Type type = Type.GetType(produceType,true);
result = (Produce) Activator.CreateInstance(type);

}
catch (TypeLoadException e)
{
Console.WriteLine("找不到你的类型:"+e.Message);
}

return result;
}
}

class Program
{
static void Main(string[] args)
{
abstructFactory text = new Factory1();
text.produce("FactoryText.productA").productName();
}
}
}
...全文
181 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
md5e 2013-03-19
  • 打赏
  • 举报
回复

using System;
using System.Collections.Generic;
using System.Text;
using Galsun.HH.FCX.Mode;
using System.Reflection;

namespace Galsun.HH.FCX.DALFactory
{

    /// <summary>
    /// 
    /// 此文件由模型系统生成,注释根据数据库的扩展字段MS_Description得到  模型转换V2.0 作者:刘朝林
    /// 生成时间:2012-12-28 17:29:03
    /// </summary>
    public interface Iba_county
    {
        ba_countyinfo GetInfoByID(string cond);
        ba_countyinfo GetInfoByID(string cond, ba_countyinfo param);
        IList<ba_countyinfo> GetInfoList(int pageindex, int pagesize, string ordfid, string cond);
        IList<ba_countyinfo> GetInfoList(int pageindex, int pagesize, string ordfid, string cond, ba_countyinfo param);
        int GetRowCount(string cond);
        int GetRowCount(string cond, ba_countyinfo param);
        int Create(ba_countyinfo info);
        int Update(ba_countyinfo info, string cond);
        int Delete(string cond);
        int Delete(string cond, ba_countyinfo param);
    }

    public sealed partial class DataAccess
    {
        /// <summary>
        /// 获取ba_county相应接口
        /// </summary>
        /// <returns></returns>
        public static Iba_county CreateIba_county()
        {
            string className = path + ".ba_county";
            return (Iba_county)Assembly.Load(path).CreateInstance(className);
        }
    }
}

md5e 2013-03-19
  • 打赏
  • 举报
回复

using System;
using System.Collections.Generic;
using System.Text;

namespace Galsun.HH.FCX.Mode
{

    /// <summary>
    /// 
    /// 此文件由模型系统生成,注释根据数据库的扩展字段MS_Description得到  模型转换V2.0 作者:刘朝林
    /// 生成时间:2013-3-8 15:57:30
    /// </summary>
    [Serializable]
    public class ba_countyinfo
    {

        private int _id = 0;
        private string _ccountycode = string.Empty;
        private string _ccountyname = string.Empty;
        private string _cmarketcode = string.Empty;
        private string _cdccode = string.Empty;
        private int _orderid = 0;


        /// <summary>
        /// 
        /// </summary>
        public int id
        {
            get { return _id; }
            set { _id = value; }
        }

        /// <summary>
        /// 县份代码
        /// </summary>
        public string cCountyCode
        {
            get { return _ccountycode; }
            set { _ccountycode = value; }
        }

        /// <summary>
        /// 县份名称
        /// </summary>
        public string cCountyName
        {
            get { return _ccountyname; }
            set { _ccountyname = value; }
        }

        /// <summary>
        /// 市场代码
        /// </summary>
        public string cMarketCode
        {
            get { return _cmarketcode; }
            set { _cmarketcode = value; }
        }

        /// <summary>
        /// 区域代码
        /// </summary>
        public string cDCCode
        {
            get { return _cdccode; }
            set { _cdccode = value; }
        }

        /// <summary>
        /// 排序
        /// </summary>
        public int OrderID
        {
            get { return _orderid; }
            set { _orderid = value; }
        }


    }
}

md5e 2013-03-19
  • 打赏
  • 举报
回复
引用 3 楼 bao605424093 的回复:
引用 2 楼 liuchaolin 的回复:
1\选创建数据模型
2\下载一个成型的数据库工厂
3\构建项目的业务逻辑
4\构建项目的UI
针对 我上面的代码:你有木有更好的Ideal,使他更具有扩展性


你写的玩意看不出是个模型



catchdream 2013-03-19
  • 打赏
  • 举报
回复
引用 3 楼 bao605424093 的回复:
引用 2 楼 liuchaolin 的回复:1\选创建数据模型 2\下载一个成型的数据库工厂 3\构建项目的业务逻辑 4\构建项目的UI 针对 我上面的代码:你有木有更好的Ideal,使他更具有扩展性
你这个看起来时通用了,但没有什么实用性;工厂模式已被就是在内部生产有限种类的产品,直接用switch就行,不需要用反射方法,那个一般是在程序集之外迫不得已的方法,效率会差点。
bao605424093 2013-03-19
  • 打赏
  • 举报
回复
引用 2 楼 liuchaolin 的回复:
1\选创建数据模型 2\下载一个成型的数据库工厂 3\构建项目的业务逻辑 4\构建项目的UI
针对 我上面的代码:你有木有更好的Ideal,使他更具有扩展性
bao605424093 2013-03-19
  • 打赏
  • 举报
回复
引用 7 楼 liuchaolin 的回复:
C# code?1234567891011121314151617181920212223242526272829303132333435363738394041using System;using System.Collections.Generic;using System.Text;using Galsun.HH.FCX.Mode;using System.Refl……
刘朝林大哥,厉害,大神级别人物,以后多多关照,我刚入门的,刚知道还有模式这种东西,我QQ:605424093,加我以后多多关照
bao605424093 2013-03-19
  • 打赏
  • 举报
回复
引用 4 楼 catchdream 的回复:
引用 3 楼 bao605424093 的回复:引用 2 楼 liuchaolin 的回复:1\选创建数据模型 2\下载一个成型的数据库工厂 3\构建项目的业务逻辑 4\构建项目的UI 针对 我上面的代码:你有木有更好的Ideal,使他更具有扩展性 你这个看起来时通用了,但没有什么实用性;工厂模式已被就是在内部生产有限种类的产品,直接用switch就行,不需要用……
用switch 以后要新增功能不是要在switch 语句快中动态加 new 语句,我用反射 就不用改之前的代码,只要想你增一个类(关于新功能的就好了)
md5e 2013-03-18
  • 打赏
  • 举报
回复
1\选创建数据模型 2\下载一个成型的数据库工厂 3\构建项目的业务逻辑 4\构建项目的UI
bao605424093 2013-03-18
  • 打赏
  • 举报
回复
没人 看帖子,伤心啊 一入编程深似海,从此节操是路人

110,547

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧