策略模式和简单工厂模式
来源:互联网 发布:牛客网算法视频百度云 编辑:程序博客网 时间:2024/06/13 00:43
策略模式和简单工厂模式有什么不同额?最近在学习设计模式,遇到这两种模式,有点儿迷糊?
简单工厂模式:
public class Operation
{
public static double GetResult(double numberA, double numberB, string operate)
{
double result = 0;
switch (operate)
{
case "+":
result = numberA + numberB;
break;
case "-":
result = numberA + numberB;
break;
case "*":
result = numberA + numberB;
break;
case "/":
if (numberB != 0)
result = numberA + numberB;
break;
}
return result;
}
private double _numberA = 0;
public double NumberA
{
get { return _numberA; }
set { _numberA = value; }
}
private double _numberB = 0;
public double NumberB
{
get { return _numberB; }
set { _numberB = value; }
}
public virtual double GetResult()
{
double result = 0;
return result;
}
}
class OperationAdd : Operation
{
public override double GetResult()
{
double result = 0;
result = NumberA + NumberB;
return result;
}
}
class OperationSub : Operation
{
public override double GetResult()
{
double result = 0;
result = NumberA - NumberB;
return result;
}
}
class OperationMul : Operation
{
public override double GetResult()
{
double result = 0;
result = NumberA * NumberB;
return result;
}
}
class OperationDiv : Operation
{
public override double GetResult()
{
double result = 0;
result = NumberA * NumberB;
return result;
}
}
public class OperationFactory
{
public static Operation CreateOperate(string operation)
{
Operation oper = null;
switch (operation)
{
case "+":
oper = new OperationAdd();
break;
case "-":
oper = new OperationSub();
break;
case "*":
oper = new OperationMul();
break;
case "/":
oper = new OperationDiv();
break;
}
return oper;
}
}
策略模式:
abstract class CashSuper
{
public abstract double AcceptCash(double money);
}
class CashNormal : CashSuper
{
public override double AcceptCash(double money)
{
return money;
}
}
class CashRebate : CashSuper
{
private double moneyRebate = 1;
public CashRebate(double moneyRebate)
{
this.moneyRebate = moneyRebate;
}
public override double AcceptCash(double money)
{
return money * moneyRebate;
}
}
class CashReturn : CashSuper
{
private double moneyCondition = 0.0;
private double moneyReturn = 0.0;
public CashReturn(double moneyCondition, double moneyReturn)
{
this.moneyCondition = moneyCondition;
this.moneyReturn = moneyReturn;
}
public override double AcceptCash(double money)
{
double result = money;
if (money >= moneyCondition)
result = money - Math.Floor(money / moneyCondition) * moneyReturn;
return result;
}
}
class CashContext
{
private CashSuper cs;
public CashContext(string type)
{
switch (type)
{
case "正常收费":
cs = new CashNormal();
break;
case "满300返100":
cs = new CashReturn(300, 200);
break;
case "打8折":
cs = new CashRebate(0.8);
break;
}
}
public double GetResult(double money)
{
return cs.AcceptCash(money);
}
}
难道仅仅是他们之间的耦合度降低了吗?
- 策略模式和简单工厂+策略模式
- 简单工厂和策略模式
- 策略模式和简单工厂
- 简单工厂模式和策略模式对比
- 策略模式和简单工厂模式
- 简单工厂模式和策略模式
- 简单工厂模式和策略模式
- 简单工厂模式和策略模式
- Java--策略模式和简单工厂模式
- 简单工厂模式和策略模式
- 简单工厂模式和策略模式
- 简单工厂模式和策略模式区别
- 简单工厂模式和策略模式
- 简单工厂,工厂模式和抽象工厂,以及策略模式
- 策略+简单工厂模式
- 策略模式+简单工厂
- 简单工厂模式 & 策略模式
- 简单工厂模式&策略模式
- 视频编码简介
- 9200中网络MAC中断处理
- grep匹配CRLF换行符的问题
- How to Add Virtual Keys on Status Bar
- 最长单调递增子序列
- 策略模式和简单工厂模式
- ASCII表
- 关于SSH服务的移植[转]
- 增加在线日语词典3个 - 最新版 - 超级网际搜索(SuperSearch) - 让思考从搜索开始!
- 将Open SSH Server 移植到ARM Linux成功
- link属性的那些事
- Shaders for Game Programmers and Artists代码实现Chapter_0503
- FireBird使用记录
- ZOJ 1465 Wall (POJ 1113)(凸包)