工厂模式在.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(); 
  }

}


原文地址:https://www.cnblogs.com/king_astar/p/35661.html