定义
传统印刷
传统思维下,只考虑当前业务需求,能正常运行。一旦需要更改,就需要打翻重做。
活字印刷
现在改变思路,将当前业务下的需求打散,按功能分块。按需调用,后期需求变动,只需修改小模块的功能即可。
简单工厂模式
简单工厂模式 = 活字印刷 + 统一调用
使用调用工厂去拿具体的方法使用(拿函数而不关注拿的是哪个函数)
关注点在于 一些处理同类型事务的方法 和 一个调用这些方法使用的调用层
使用场景
可变业务需求,需要扩展的业务
页面逻辑与业务逻辑分离,业务逻辑可放工厂类
如何实现
- 创建规则类 BaseClass,可以是抽象类,该类简单说明需要实现的功能(不同方式完成同一种功能,比如超市收银打折促销活动)
- 创建 基类 BaseClass 的多个派生类 A,B,C ... ,它们用于实现功能,只不过实现方法各不相同(满减、收银)
- 创建工厂类 FactoryClass , 它用于根据不同的传参,实例化对应基类
- 在调用工厂类的创建方法时,传递不同的参数实际上在调用不同的派生类,至于调用哪个派生类是由工厂类控制,调用方不用考虑
// step 1
abstract CSuper
{
public abstract void Method();
}
// step 2
class A:CSuper
{
public void Method(){}
}
class B:CSuper
{
public void Method(){}
}
// step 3
class CsFactory
{
public static CSuper CreateSuper(string type)
{
if (type == "A")
return new A();
//return ...
}
}
void Main()
{
// step 4
CSuper cs = CsFactory.CreateSuper("A");
cs.Method();
}优点
将同个业务的不同处理方式,按活字一样放在一起,然后通过工厂类去创造调用,
这样做,可以保证在后期 增加处理方法,修改处理方法 着重于处理这些活字方法即可。
实现了业务与调用层的分离,降低二者之间的耦合度,提高了后期可维护性,可扩展性,可复用
switch 与 多个if 相比的优势
如果switch 可替代多个if, 那么swtich要比较的次数比if少,
switch在满足条件后就退出swtich了,而if不会,除非写if ... else if ... else
在可读性上,swtich 更直观(判断同一个值时),if 常表示不太相关的情况判断
在编辑上,switch书写更直观,还有ide智能感知加持
代码标准
高内聚,低耦合
可维护,可复用,可扩展
使用误区
- 用计算机方式去思考,只考虑如何实现完成任务,不考虑用那种方式去完成任务更好
- 只保证代码正常运行,不考虑代码后期 维护、扩展、复用
- 让业务逻辑和调用逻辑混合在一起,后期维护难度太大