/// <summary>
    /// 抽象,而且是基于接口的
    /// </summary>
    interface IDatabase
    {
        string ProviderName { get; }
        int ExecuteNonQuery();
    }

    class DatabaseBase : IDatabase
    {
        protected string providerName;  // 封装内部对象

        public virtual string ProviderName
        {
            get { return providerName; }
        }

        /// <summary>
        /// 虚方法多态,同时采用内部封装的方法调用结果
        /// </summary>
        /// <returns></returns>
        public virtual int ExecuteNonQuery()
        {
            return ProviderName.Length;
        }
    }

    class OracleDatabase : DatabaseBase
    {
        public OracleDatabase() { providerName = "ORA"; }
    }

    class SqlDatabase : DatabaseBase
    {
        public SqlDatabase() { providerName = "SQL"; }
    }

    interface IDatabaseFactory
    {
        IDatabase Create(string provider);
    }

    class DatabaseFactory : IDatabaseFactory
    {
        public IDatabase Create(string provider)
        {
            switch (provider)
            {
                case "oracle":
                    return new OracleDatabase();
                case "sqlServer":
                    return new SqlDatabase();
                default:
                    throw new NotSupportedException("provider");
            }
        }
    }

这个例子很简单,但设计是对的!
希望以后能好好分析一个大点的优秀的OOP项目

posted on 2008-04-19 11:18  小猴子  阅读(207)  评论(0编辑  收藏  举报