Provide模式

来源:互联网 发布:成都行知小学对口中学 编辑:程序博客网 时间:2024/04/27 22:01

namespace ProviderDemo
{
    // 定义保存购物车项目的约定
    public abstract class CartProvider
    {
      public abstract void AddItem(int itemno);

    }   
}

namespace ProviderDemo
{
    class DBCartProvider : CartProvider
    {
        public override void AddItem(int itemno)
        {
            // 保存到数据库中

            // 取得数据库连接串

            // sql 命令

            // 执行 sql 命令

            Console.WriteLine("DB Cart Provider: {0}", itemno);
        }
    }
}

namespace ProviderDemo
{
    class FileCartProvider : CartProvider
    {
        // 子类中完成具体的实现
        public override void AddItem(int itemno)
        {
            string filename = "cart.txt";

            // 使用追加模式打开文件
            System.IO.StreamWriter sw = new System.IO.StreamWriter(filename, true);

            sw.WriteLine(itemno);

            sw.Close();


        }

namespace ProviderDemo
{
    public class MyCartProvider
    {
        //静态构造函数不用修辞符,它只创建一次.
        // 在静态构造函数中根据配置文件实例对象
        static MyCartProvider()
        {
            // 读取实现类
            string className = System.Configuration.ConfigurationManager.AppSettings["CartProvider"];
            // 通过反射取得当前的程序集
            System.Reflection.Assembly assembly = System.Reflection.Assembly.GetCallingAssembly();
            // 通过类型创建对象实例
            object o = assembly.CreateInstance(className);
            // 此对象应该派生自 CartProvider
            cp = o as CartProvider;
        }
        // 具体现实的引用
        static CartProvider cp;
        // 静态的方法必须使用静态的数据成员
        public static void AddItem(int itemno)
        {
            cp.AddItem(itemno);
        }
    }
}

<configuration>

  <appSettings>

    <!-- 在配置文件中定义具体的实现类 -->
    <add key="CartProvider" value="ProviderDemo.FileCartProvider"/>
   
  </appSettings>
 
 
</configuration>
    }
}