Just RUN

A scientist builds in order to learn; an engineer learns in order to build.

继续昨天的问题。

昨天的问题,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;
            }

        }

    }

}

posted on 2004-12-15 10:36    阅读(2552)  评论(0编辑  收藏  举报

导航