一些设计思想的汇集(1)

来源:互联网 发布:宝贝故事软件下载 编辑:程序博客网 时间:2024/05/22 10:25

关于TextBox内容自动变换的设计:

首先定义接口

public interface IConverter {

    string Convert(string value);

}

然后定义具体的转换类,比如金额类型值自动加逗号转换类

public class CurrentMoneyConverter : IConverter {

    public string Convert(string value) { ...} //实现具体的转换逻辑

}

定义保存需要转换的对象控件的容器类

public class ActiveConverter {

    // 保存追加的控件及其对应的转换模式
    private Dictionary<Control, Queue<IConverter>> dic = new Dictionary<Control, Queue<IConverter>>();

    // 追加需要转换的控件及转换模式的方法
    public void AddConverter(Control control, IConverter converter) {
        if (dic.ContainsKey(control)) {
            if (dic[control].Contains(converter) == false) {
                dic[control].Enqueue(converter);
            }
        } else {
            Queue<IConverter> queue = new Queue<IConverter>();
            queue.Enqueue(converter);
            dic.Add(control, queue);
            control.Leave += new EventHandler(this.DoConversion);
        }
    }

    // 转换事件
    private void DoConversion(object sender, EventArgs e) {
        Control control;
        if (sender is Control) {
            control = (Control)sender;
        } else {
            return;
        }
        Queue<IConverter> queue;
        if (dic.ContainsKey(control)) {
            queue = dic[control];
        } else {
            return;
        }
        foreach (IConverter converter in queue) {
            try {
                control.Text = converter.Convert(control.Text);
            } catch {
                // TODO
            }
        }
    }

    public ActiveConverter() {
        return;
    }
}

最后,在画面类里定义ActiveConverter 的实例,在画面出始化的时候,实例化,并追加需要转换的控件

 this.activeConverter.AddConverter(this.tbxA, new CurrentMoneyConverter());
this.activeConverter.AddConverter(this.tbxB, new AlphanumericOnlyConverter());

 

此设计思想重点在于简化画面类设计,使其只专注于数据表示.

原创粉丝点击