前言
之前看过设计模式的场景故事,但是代码是一点都看不懂,代码要去实践,看着视频以为了解,但是敲起来可能漏洞百出,有句古话是这么说的:纸上得来终觉浅,绝知此事要躬行。所以,多动动小手吧~
简单工厂模式
what:
又叫做静态工厂方法(Static Factory Method)模式,简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例,是工厂模式家族中最简单实用的模式。
简单来说,它更像一个接口,将参数传入到工厂,工厂负责调用给客户端。
工厂很大方,谁需要哪个参数,就直接来我这拿。只不过工厂的能力有限,只能再简单的情况下使用
场景:
小菜对于面试官提出的一个计算器控制台程序三下五除二就交卷了,殊不知“代码无错就是优”这个观念是非常错误的。面试受挫后的小菜便找到表哥大鸟请教失败的原因,这时,一个菜鸟的故事就发生了。。。
治治病:
这里大鸟指出了几个明显的问题,初学者代码毛病:
1. 代码规范
string A = console.readline(); //这里的A是指什么?不得而知
这里应该写为:
string strNumberA = console.readline(); //很明显这里的A是指一个数字,并且第二个单词首字母大写
2.面向对象:
活字印刷术之前,是刻版印刷,当时的文字要修改,必须全部重刻,要加字,必须全部重刻,要重新排顺序,还要全部重刻,并且印完这本书之后,就再无任何可以再利用的价值了,这也是为什么火药,指南针,造纸术都是从无到有的伟大发明,而活字印刷术仅仅是从有到进步却被成为四大发明之一了。
这里的活字印刷有四个优点:(即面向对象的优点)
- 可维护,只改要改的字
- 可复用,刻好的字重复使用到下一个版本
- 可扩展,若要加字,只需刻要加的字
- 灵活性好,活字移动,不需要重新刻。
3.复制VS复用:
不要让你的世界变成了CTRL+C 和CTRL+V
4.封装:
- 让业务逻辑与界面逻辑分开
- 使耦合度下降
- 分离开容易维护或扩展
- -
应用:
- 工厂类负责创建的对象比较少;
- 客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心;
- 由于简单工厂很容易违反高内聚责任分配原则,因此一般只在很简单的情况下应用。
代码展示:
Operation类:
public class Operation //opration运算类
{
private double _numberA = 0;
private double _numberB = 0;
public double NumberA //共享
{
get { return _numberA; }
set { _numberA = value; }
}
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;
if (NumberB == 0)
throw new Exception("除数不能为0.");
result = NumberA / NumberB;
return result;
}
}
简单运算工厂类:
public class OperationFactory
{
public static Operation createOperate(string operate)
{
Operation oper = null;
switch (operate)
{
case "+":
oper = new OperationAdd();
break;
case "-":
oper = new OperationSub();
break;
case "*":
oper = new OperationMul();
break;
case "/":
oper = new OperationDiv();
break;
}
return oper;
}
}
客户端代码:
class Program
{
static void Main(string[] args)
{
Operation oper;
oper = OperationFactory.createOperate("+");
oper.NumberA = 500;
oper.NumberB = 21;
double result = oper.getresult();
Console.WriteLine("结果="+result );
Console.ReadKey();
}
}
效果展示:
后记
中间出现了一些错误,自己都能克服了,期待下一个模式~
另:今天用markdown又学会了几个快捷键,真的太方便了。推荐哦~