Dot Net设计模式—原型模式
【IT168技术文档】
在商品房销售系统中,房屋信息是基础信息。在系统运行前必须输入房屋的各种信息到系统中,这是一项枯燥的重复劳动。如果让用户重复输入房间的类型、面积和卫生间样式,这个系统肯定尚未运行就夭折了。实际上,一个小区楼盘的样式并不多,不同的只是楼号。另外,楼盘中的房间类型也非常有限,从而为解决输入问题提供了启示。楼盘的逻辑结构如图所示。

一个小区包含多个楼盘,一个楼盘包括多层,一层包括多个房间。楼盘和房间都有自己的样式(这个模型忽略高档住宅和别墅),要解决的问题是如何创建这些类的实例,这些实例内部的数据基本相同。
方案一:手工输入,根据录入的数据实例化对象。
这个方案在增加用户痛苦的同时,并未给程序员带来更多的好处,不予考虑。
方案二:由用户输入一些基本信息和规则,由程序来实例化对象。
系统执行过程如下。
(1) 用户选择新增一个楼盘,系统创建楼盘实例。
(2) 用户输入一个房间的基本信息和需要自动生成的楼层,系统实例化这些信息,
然后增加到楼盘中。
(3) 用户重复第2步,直到输入整个楼盘的数据。
这个方案中的用户操作已经减少了很多,但仍有问题,如果一个小区的各个楼盘结构完全一样,那么如何自动生成?为此在用户界面上需要增加生成楼盘组,然后输入需要生成的数量及房间信息等,这样使得系统变得非常不灵活,无法扩充。例如,需要建立一个基本类似的小区。并且也很难去掉某些功能,例如不需要自动生成楼盘组。如果自动生成出现问题,例如房号的规则输入错误,则必须销毁对象后重新处理。虽然系统中已经存在一个现成的楼盘(例如一幢已经销售完成的楼盘与新楼盘结构一样),但是却无法使用。
从程序角度更是难以维护,每新增一级输入,都需要改动创建对象的工厂方法。
不幸的是,这种方案在重复输入信息的系统中经常被采用,从而导致系统变得难以维护。
方案三:拷贝/粘贴。
从用户的角度看,系统最好支持拷贝/粘贴。例如复制一个现成的楼盘,粘贴后只要修改楼号即可,或者复制多个楼层粘贴后自动增加到楼层中,这样用户的交互过程要简单很多。
在商品房销售系统中,房屋信息是基础信息。在系统运行前必须输入房屋的各种信息到系统中,这是一项枯燥的重复劳动。如果让用户重复输入房间的类型、面积和卫生间样式,这个系统肯定尚未运行就夭折了。实际上,一个小区楼盘的样式并不多,不同的只是楼号。另外,楼盘中的房间类型也非常有限,从而为解决输入问题提供了启示。楼盘的逻辑结构如图所示。

一个小区包含多个楼盘,一个楼盘包括多层,一层包括多个房间。楼盘和房间都有自己的样式(这个模型忽略高档住宅和别墅),要解决的问题是如何创建这些类的实例,这些实例内部的数据基本相同。
方案一:手工输入,根据录入的数据实例化对象。
这个方案在增加用户痛苦的同时,并未给程序员带来更多的好处,不予考虑。
方案二:由用户输入一些基本信息和规则,由程序来实例化对象。
系统执行过程如下。
(1) 用户选择新增一个楼盘,系统创建楼盘实例。
(2) 用户输入一个房间的基本信息和需要自动生成的楼层,系统实例化这些信息,
然后增加到楼盘中。
(3) 用户重复第2步,直到输入整个楼盘的数据。
这个方案中的用户操作已经减少了很多,但仍有问题,如果一个小区的各个楼盘结构完全一样,那么如何自动生成?为此在用户界面上需要增加生成楼盘组,然后输入需要生成的数量及房间信息等,这样使得系统变得非常不灵活,无法扩充。例如,需要建立一个基本类似的小区。并且也很难去掉某些功能,例如不需要自动生成楼盘组。如果自动生成出现问题,例如房号的规则输入错误,则必须销毁对象后重新处理。虽然系统中已经存在一个现成的楼盘(例如一幢已经销售完成的楼盘与新楼盘结构一样),但是却无法使用。
从程序角度更是难以维护,每新增一级输入,都需要改动创建对象的工厂方法。
不幸的是,这种方案在重复输入信息的系统中经常被采用,从而导致系统变得难以维护。
方案三:拷贝/粘贴。
从用户的角度看,系统最好支持拷贝/粘贴。例如复制一个现成的楼盘,粘贴后只要修改楼号即可,或者复制多个楼层粘贴后自动增加到楼层中,这样用户的交互过程要简单很多。
0
相关文章