欢迎来到天天文库
浏览记录
ID:40316223
大小:15.72 KB
页数:5页
时间:2019-07-31
《简单工厂模式和策略模式的区别》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、最近一直在抽时间研究设计模式,之前对设计模式也有一定的了解,但是都没有平心静气的去研究过,只是了解了一些皮毛,最近打算再深入研究一下,重新打开了设计模式的数据,对之前的疑问一个个的刨根问底,今天看了简单工厂模式和策略模式看的人有点小晕,两个的大概思路没有怎么变,都是通过多态去减少代码的耦合度,怎么看两个都是如出一辙,最后终于找到了两个的本质区别,在此和大家分享下:先上代码:简单工厂模式://抽象类abstractclassAbsClass{ //抽象方法:提供一些列的算法操作 publicabstract voidacceptCash(stringorg
2、);}//继承自抽象类classA:AbsClass{ //具体方法:提供一些列的算法操作 publicoverridedoubleacceptCash(stringorg){ Console.WriterLine("A类方法"); }} //继承自抽象类classB:AbsClass{ //具体方法:提供一些列的算法操作 publicoverridedoubleacceptCash(stringorg){ Console.WriterLine("B类方法"); }}...........简单工厂类//现金收取工厂c
3、lassCashFactory{ //根据条件返回相应的对象 publicstatic AbsClasscreateCashAccept(stringtype) { AbsClasscs=null; switch(type) { case"A": cs=newAl(); break; case"B": cs=newB(); break; cas
4、e"...": ............ break; } returncs; }} 客户端调用:/利用简单工厂模式根据下拉选择框,生成相应的对象AbsClass csuper=CashFactory.createCashAccept("A"); 策略模式: 前面的类没有任何变化,只是把Factory变成了CaseContext策略类//策略ContextclassCashContext{ //声明一个现金收费父类对象 private AbsClasscs; //设置
5、策略行为,参数为具体的现金收费子类(正常,打折或返利) publicCashContext(AbsClasscsuper) { this.cs=csuper; } //得到现金促销计算结果(利用了多态机制,不同的策略行为导致不同的结果) publicdoubleGetResult(doublemoney) { returncs.acceptCash(money); }} 客户端调用:AbsClass cc=null; switch(cbxType.SelectedItem.ToString())
6、 { case"A": cc=newCashContext(newA()); break; case"B": cc=newCashContext(newB()); break; case"...": ....... break; }最后
7、概括总结一下:策略模式和简单工厂模式看起来非常相似,都是通过多态来实现不同子类的选取,这种思想应该是从程序的整体来看得出的。如果从使用这两种模式的角度来看的话,我们会发现在简单工厂模式中我们只需要传递相应的条件就能得到想要的一个对象,然后通过这个对象实现算法的操作。而策略模式,使用时必须首先创建一个想使用的类对象,然后将该对象最为参数传递进去,通过该对象调用不同的算法。在简单工厂模式中实现了通过条件选取一个类去实例化对象,策略模式则将选取相应对象的工作交给模式的使用者,它本身不去做选取工作。结合上面的代码和下面的释义不难看出,其实两个的差别很微妙,Factory
8、是直接创建具体的对象并用
此文档下载收益归作者所有