由于代码写得不多,没什么经验~~所以无法领略设计模式中的神髓~~工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使一个实例化延迟到其子类。我想问一下工厂方法模式对程序以后的扩展到底有何作用~~~~?
IFactory factory=new UndergraduateFactory();//IFactory为接口,UndergraduateFactory为其子类
LeiFeng student=factory.CreateLeiFeng(); student.BuyRice();
student.Sweep();
student.Wash();在上面的代码中
IFactory factory=new UndergraduateFactory();
LeiFeng student=factory.CreateLeiFeng();
本可以用
LeiFeng student=new LeiFeng();
就搞定的,为上面要把new LeiFeng();放在UndergraduateFactory类的CreateLeiFeng()中来执行~~~~???
这样的工厂方法模式到底对整个程序以后的扩展修改由什么帮助?
IFactory factory=new UndergraduateFactory();//IFactory为接口,UndergraduateFactory为其子类
LeiFeng student=factory.CreateLeiFeng(); student.BuyRice();
student.Sweep();
student.Wash();在上面的代码中
IFactory factory=new UndergraduateFactory();
LeiFeng student=factory.CreateLeiFeng();
本可以用
LeiFeng student=new LeiFeng();
就搞定的,为上面要把new LeiFeng();放在UndergraduateFactory类的CreateLeiFeng()中来执行~~~~???
这样的工厂方法模式到底对整个程序以后的扩展修改由什么帮助?
当你不知道new LeiFeng还是别的什么类型,只知道它必定是LeiFeng或者其子类时,你希望确定该new什么时候不用重新修改实例化sdudent的部分的代码)甚至根本不重新编译它,就可以写CreateLeiFeng。如果你没有这个需求,那么就不必写。
int b=2;
int c=a+b;
Console.WriteLine("c={0}",c);
加入我本来以为要写这个程序就能交差,可是老师偏偏对我的c变量的计算挑三拣四,可是他也是模模糊糊地说不出了所以然,而我也不敢认为加法运算就是“a+b”这么简单了,想得脑袋疼了,怎么办?我可以把这个责任甩给老师自己去写:int a=1;
int b=2;
int c=Plus.Calculate(a,b);
Console.WriteLine("c={0}",c);谁有本事谁去写Calculate方法吧,只要它返回int我能调用就行了。就是这么简单的东西,这就是模式玩的东西,模式都是把最简单的东西吹的神乎其神,你没有需求、没做过变化多一点的程序时,以为她很神。等做过了,才知道它其实就是把一些简单的东西弄成了独立的class或者interface,然后起了一个特别雷人的名字,让人不好认出来。
另外你所说的工厂模式:顾名思义,现实生活中的工厂主要为了生产产品,而程序开发中,就是生产对象(接口、类等),一般在开发程序时,有些程序的很多模块都具有相同的功能,而往往我们会把这些相同的功能的对象都继承同一接口,在实际应用中我们更多的喜欢直接调用接口,但接口必须实例到实现该接口的类,这时便可通过工厂模式生产出实现这个接口的具体类,虽然这些类都具有相同的接口,不过每个具体类对接口的成员(方法)的操作有所差别,因此调用时,根据需要生产出这个模块(功能)的具体类,在外部统一调用时则无需关心是哪个具体类,只要操作这个接口就行。
http://terrylee.cnblogs.com/archive/2006/01/04/310716.html?page=1#pagedcomment
主要就是为了应对变化,如果代码中都这么写LeiFeng student=new LeiFeng(); 将来需要换成
HuangJiGuang hjg = new HuangJiGuang();你要把所有的LeiFeng都改成HuangJiGuang,而用了工厂方法模式后能尽可能的减小这种改动带来的影响
我昨天在家里晚上在家里郁闷了好半天~~如rabbitlzx说的是我能想到的工厂方法的唯一作用。