继续昨天的问题。
昨天的问题,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吧,赫赫,见笑了。
先说下我对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;
}
}
}
}
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;
}
}
}
}