简单工厂模式和策略模式的区别

最近一直在抽时间研究设计模式,之前对设计模式也有一定的了解,但是都没有平心静气的去研究过,只是了解了一些皮毛,最近打算再深入研究一下,重新打开了设计模式的数据,对之前的疑问一个个的刨根问底,今天看了简单工厂模式和策略模式看的人有点小晕,两个的大概思路没有怎么变,都是通过多态去减少代码的耦合度,怎么看两个都是如出一辙,最后终于找到了两个的本质区别,在此和大家分享下:

先上代码:

简单工厂模式:

//抽象类abstract class AbsClass{ //抽象方法:提供一些列的算法操作 public abstractvoid acceptCash(string org);}

//继承自抽象类class A:AbsClass{ //具体方法:提供一些列的算法操作 public override double acceptCash(string org)

Console.WriterLine("A类方法");

}}

//继承自抽象类class B:AbsClass{ //具体方法:提供一些列的算法操作 public override double acceptCash(string org)

Console.WriterLine("B类方法");

}}

… …. ….

简单工厂类

//现金收取工厂class CashFactory{ //根据条件返回相应的对象 public staticAbsClass createCashAccept(string type) {AbsClass cs = null; switch (type) { case "A": cs = new Al(); break; case "B": cs = new B(); break; case "…": …….. …. break; } return cs; }}

客户端调用:

/利用简单工厂模式根据下拉选择框,生成相应的对象AbsClasscsuper = CashFactory.createCashAccept("A");

策略模式:

前面的类没有任何变化,只是把Factory变成了CaseContext策略类

//策略Contextclass CashContext{ //声明一个现金收费父类对象 privateAbsClass cs;

//设置策略行为,参数为具体的现金收费子类(正常,打折或返利) public CashContext(AbsClass csuper) { this.cs = csuper; }

//得到现金促销计算结果(利用了多态机制,不同的策略行为导致不同的结果) public double GetResult(double money) { return cs.acceptCash(money); }}

客户端调用:

AbsClasscc = null; switch (cbxType.SelectedItem.ToString()) { case "A":cc = new CashContext(new A()); break; case "B":cc = new CashContext(new B()); break; case "…":… …. break; }

最后概括总结一下:

漫过心际的孤独,早已蔚然成冰,而你是这个季节里最美的音符。

简单工厂模式和策略模式的区别

相关文章:

你感兴趣的文章:

标签云: