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(); 
      }

    }


  • 相关阅读:
    旋转编码器控制线扫相机
    函数被const修饰,const修饰的究竟是谁?
    静态函数不能引用非静态成员变量的原因,this指针
    Ubuntu18.04 截图工具flameshot
    基于STM32的uCGUI移植和优化
    基于bootsplash的嵌入式linux启动画面定制
    uC/OS-II源码分析(一)
    uC/OS-II源码分析(二)
    uC/OS-II源码分析(三)
    uC/OS-II源码分析(四)
  • 原文地址:https://www.cnblogs.com/king_astar/p/35661.html
Copyright © 2011-2022 走看看