现在的位置: 首页 > 综合 > 正文

继续昨天的问题。

2012年01月16日 ⁄ 综合 ⁄ 共 4156字 ⁄ 字号 评论关闭
昨天的问题,DataGrid的TableStyle的确是一个很复杂的结构,而clone的实现应该是基于prototype模式的,昨天回家的路上感觉还是有点不爽,使用prototype解决这个问题,不是不可以,但是不是很好,应验了Richard的一句话,"There is no right or wrong, but good or bad."(不是原话,意思而已)也正因为Richard说过"Just make it good enough",我还是想改它,参考了一下Builder模式,写了一个不伦不类的Builder,见笑了。

先说下我对prototype的疑虑:

1、MS并没有将TableStyle做成可以clone的,可见这个东西不适合clone;

2、TableStyle太复杂,clone起来自然也简单不了,基本解决不了问题在clone里,还是乱七八糟。

唉,不知道怎么,坐在电脑前永远也想不了问题,习惯性的在键盘上狂敲而已。

下面看看我的不伦不类的Builder吧,赫赫,见笑了

Copyright (c) runmin Copyright


Using directives


namespace Runmin.Sample

{

    
/// <summary>

    
/// Returns an instance of System.Windows.Forms.DataGridTableStyle class.

    
/// </summary>


    public interface ITableStyleBuilder

    
{

        
/// <summary>

        
/// The builder method.

        
/// </summary>

        
/// <returns>TableStyle instance</returns>


        DataGridTableStyle BuildStyle(string theMappingName);

    }



    
public class DefaultTableStyleBuilder : ITableStyleBuilder

    
{

        
private DisplayStyle displayStyle;

        
public DisplayStyle DisplayStyle

        
{

            
get

            
{

                
return this.displayStyle;

            }


            
set

            
{

                
this.displayStyle = value;

            }


        }




        
private DataGridColumnStyle gridColumnStyle;

        
public DataGridColumnStyle GridColumnStyle

        
{

            
get

            
{

                
return this.gridColumnStyle;

            }


            
set

            
{

                
this.gridColumnStyle = value;

            }


        }




        
public virtual DataGridTableStyle BuildStyle(string theMappingName)

        
{

            DataGridTableStyle theTableStyle 
= new DataGridTableStyle();


            theTableStyle.MappingName 
= theMappingName;


            theTableStyle.ForeColor 
= 

                theTableStyle.HeaderForeColor 
= 

                theTableStyle.SelectionForeColor 
= 

                
this.displayStyle.ForeColor;


            theTableStyle.BackColor            
= this.displayStyle.BackColor;

            theTableStyle.HeaderBackColor      
= this.displayStyle.HeaderBackColor;

            theTableStyle.GridLineColor        
= this.displayStyle.GridLineColor;

            theTableStyle.SelectionBackColor   
= this.displayStyle.SelectionBackColor;


            
return theTableStyle;

        }



    }



    
public struct DisplayStyle

    
{

        
private System.Drawing.Color backColor;

        
public System.Drawing.Color BackColor

        
{

            
get

            
{

                
return backColor;

            }



            
set

            
{

                backColor 
= value;

            }


        }



        
private System.Drawing.Color foreColor;

        
public System.Drawing.Color ForeColor

        
{

            
get

            
{

                
return foreColor;

            }



            
set

            
{

                foreColor 
= value;

            }


        }



        
private System.Drawing.Color gridLineColor;

        
public System.Drawing.Color GridLineColor

        
{

            
get

            
{

                
return gridLineColor;

            }



            
set

            
{

                gridLineColor 
= value;

            }


        }



        
private System.Drawing.Color headerBackColor;

        
public System.Drawing.Color HeaderBackColor

        
{

            
get

            
{

                
return headerBackColor;

            }



            
set

            
{

                headerBackColor 
= value;

            }


        }



        
private System.Drawing.Color selectionBackColor;

        
public System.Drawing.Color SelectionBackColor

        
{

            
get

            
{

                
return selectionBackColor;

            }



            
set

            
{

                selectionBackColor 
= value;

            }


        }



        
private System.Drawing.Color alternatingBackColor;

        
public System.Drawing.Color AlternatingBackColor

        
{

            
get

            
{

                
return alternatingBackColor;

            }



            
set

            
{

                alternatingBackColor 
= value;

            }


        }


    }


}


抱歉!评论已关闭.