zoukankan      html  css  js  c++  java
  • 工厂模式在.net中实现

    问题:
    有个页面要普通的列表显示和图表显示.
    解决方法:
    分别定义两个用户控件:ChartList.ascx和DataGridList.ascx.
    抽象出来一个类工厂,abstractFactory.如下图




    //ChartList.ascx和DataGridList.ascx控件类都是System.Web.UI.UserControl的派生类,同时继承了一个接口IView,其中只有一个方法,BindList()
    //举例很简单,接口可以扩展。。。
    我们来看看,abstractFactory如何为我们提供相应的“产品“
     

    public  class abstractFactory
     
    {
      
    public enum ViewType
      
    {
       chart,Datagrid
           
      }

      
    private IView _iView;
      
    public IView IView
      
    {
       
    get {return _iView; }
      }

      
    private  System.Web.UI.WebControls.PlaceHolder _placeHolder = new System.Web.UI.WebControls.PlaceHolder();
      
    public   System.Web.UI.WebControls.PlaceHolder MyHolder
      
    {
       
    get{return _placeHolder;}
      }


      
    public   abstractFactory(int ViewType)
      
    {
       
    switch(ViewType)
       
    {
        
    case (int)ViewType.chart:
         ChartList c 
    = new ChartList();     
         _iView  
    = c;
         _placeHolder.Controls.Add(c);
         
    break;
        
    case (int)ViewType.Datagrid:
         DataGridList d 
    = new DataGridList();
         _iView  
    = d;
         _placeHolder.Controls.Add(d);
         
    break;
       }

      }


     }


    //定义的接口
     public interface IView
     
    {
        
    void BindList();

     }

    //DataGridList和ChartList具体的代码这里没有给出。



    接着在一个页面里面完成最后的工作。

    public class DocumentInfo : System.Web.UI.Page
     
    {
      
    protected System.Web.UI.WebControls.PlaceHolder PlaceHolder1;
      
    protected System.Web.UI.WebControls.DropDownList DropDownList1;
     
      
    private void Page_Load(object sender, System.EventArgs e)
      
    {
       
    // 在此处放置用户代码以初始化页面
       DropDownList1.Items.Add(new ListItem(abstractFactory.ViewType.chart.ToString(),abstractFactory.ViewType.chart.ToString()));
       DropDownList1.Items.Add(
    new ListItem(abstractFactory.ViewType.Datagrid.ToString(),abstractFactory.ViewType.Datagrid.ToString()));

       abstractFactory a1 
    =new abstractFactory(Convert.ToInt32(DropDownList1.SelectedValue));
       PlaceHolder1 
    = a1.MyHolder;
       a1.IView.BindList(); 
      }

    }


  • 相关阅读:
    Retina屏的移动设备如何实现真正1px的线
    使用Karma、Mocha实现vue单元测试
    ios中非ARC项目中引用ARC文件
    ios中Pldatabase的用法(4)
    ios中Pldatabase的用法(3)
    ios中Pldatabase的用法(2)
    ios中修改数字键盘
    asyncsocket的用法
    ios中Pldatabase的用法
    ios中打包
  • 原文地址:https://www.cnblogs.com/king_astar/p/35661.html
Copyright © 2011-2022 走看看