前一段时间我看了一下关于设计模式的一些文章,想从中提高点自己境界,结果不是很理想(但是我还是要这里喷喷,总学到一点了吧)。总体感觉这些东西很抽象,我的大脑里现在没有什么设计模式令人发狂的特点,只有我现在的个人见解(如有雷同,各种原因)。
整个设计模式中,最简单的算是简单工厂设计模式吧(有点篇主说这个可以不算设计模式,+_+|||),真正的内容简单易懂,不过也充分的展现了oo的精髓啊,让代码变得更加简洁明了。
简单工厂设计模式类图:
简单工厂设计模式基本上算是这三部了:
1 工厂类(Simple Factory): 你要实现功能的地方,调用抽象类实例化它子类,已完成不同需求
2 抽象产品(Product):定义抽象类和抽象方法(子类要实现该类中的方法)。
3 具体产品(ConcreteProduct):定义继承抽象类的子类,同时要重写父类的方法(这个你懂得啊)
我曾经项目中实际项目需求:快餐仓库项目中,比如入库,退货,提货。。。等一些内容的详细信息,它们都需要查询,同时查询列头有差异,而我想用一个窗体实现查询所有内容的详细信息,怎么办?一种是每一个详细用一个datagridview,然后隐藏,用哪一个的时候显示哪一个,其他的都隐藏,另一种是用一个datagridview,但其中表头列动态生成。
前者方式可以用,但是如果详细多了,代码量就会增多,看起来臃肿,维护找bug是个麻烦事(关键是其他人看来,这样写很不专业。。。。)。后者方式其实写起来也很麻烦,但是我这里用了简单工厂设计模式写的:
1 工厂类(Simple Factory):这里调用抽象类,实例化它的子类,方法返回一个datatable,内容为datagridview的各个属性,如columnName,Name,width等
2 抽象产品(Product):这里就写了一个抽象方法,返回一个datatable(这些是废话,上面都写了)
3 具体产品(ConcreteProduct):这里我是数组将一列列属性存起来,然后添加到datatable中。
(代码现在获得不到,就没有代码示例了)
个人总结:
1.在实际项目中实现代码的低耦合,各个子类方法实现自己功能,方便调试。
2.明确了各自的职责和权利,有利于整个软件体系结构的优化。
3.不过增加程序的复杂度(至少在这里我感觉写起来让我搞了半天,不过能提升自己对OO认识)。
4.违反了高内聚责任分配原则,类与类之间关系过于密切,比如添加一个功能,要修改工厂类,和子类(这个麻烦)。
总的来说,简单工厂设计模式用起来有点麻烦,但是算是给自己打打基础,之后抽象工厂、方法工厂等设计模式可是在此基础上扩展的。