想写这文章是为我复习和加深自己对阅读《大话设计模式》的理解。设计模式很多种,用法也各式各样,但是总结起来无非就是通过这些模式让你找到"封装变化"、“对象间的松散耦合、”针对接口编程“的感觉,从而设计出易维护、易扩展、易复用、灵活性好的程序。---设计模式就是面向对象编程思维的体操。
简单工厂模式
《大话设计模式》这本书中列举了一个非常好的例子,就是以菜鸟的面试经历引出代码规范、面向对象编程、复用、封装以及紧耦合和松耦合的概念。这个例子我觉得堪称经典。一个简单的计算器实现:
在main方法中通过if判断实现”+“、”-“、”*“、”/“的运算。最后在控制台输出结构。这么能不能实现功能呢,那肯定的是能!因为结果的正确的。可是大家都是java是面向对象的编程语言,我们为什么不加以利用呢。
编写程序的时候我们要考虑如下几点:
第一点:程序的可维护性
第二点:代码的可复用性
第三点:程序的可扩展性
第四点:代码的灵活性好。
在实际应用过程中通过封装、继承、多态把程序的耦合度降低通过设计模式是程序变得更加灵活、容易修改并且易于复用。
通过上述内容书中的菜鸟就封装了一个算法类(Operation)。里面的写法就是通过getResult的switch语句选择性的执行各种算发,然后返回结果。这种实现方式就是实现了业务和界面的分离。可是这种写法业务之间结合的太紧密,说句难听的就是你是公司新入职的同事,公司还没对你有绝对的信任,但是公司还不得不把这所有的算法交给你来维护,这样如果有坏心思的人也就可以对其他的业务算法做破坏,这是公司不愿意看到的。所以我们为了涨薪为了升职也不得不从了公司。要把业务重新封装,然后再把"+,"-,"*,"/".这个四个业务也进行封装,然后继承算法类(Operation)。上述的四个业务实现业务类(operation)的getResult方法。
业务类(Operation),里面有NumberA和NumberB两个属性一个抽象方法getResult()方法;
业务子类:
OperationAdd
OperationSub
OperationMul
OperationDiv
分别实现父类getResult()方法
上面所述的已经算是实现了业务与界面的分离、业务与业务之间分离,这个时候我们工厂也要建立起来了(实现工厂模式):
public class OperationFactory{
public static Operation createOperation(String opera){
Operation opera=null;
switch(opera){
case:"+"
opera=new OperationAdd();
break;
case:"-"
opera=new OperationSub()
break;
case:"*"
opera=new OperationMul();
break;
case:"/"
opera=new OperationDiv();
break;
}
return opera;
}
}
这个工厂代码完成之后我们只需要输入符号,工厂就会自动帮我们实例化对应的对象,然后通过对台返回父类的方式实现了计算器的结果;
剩下的代码就简单了
Operation oper=Operation.createtiongFactory.createOperate("+");
oper.NumberA=1;
oper.NumberB=2;
double result=oper.getResult();
这样业务修改就非常简单了,如果想让同事修改加法逻辑,只要给他加法类就好了!
这样一个简单的工程模式就实现了!也是我看书的后的总结,大部分也是书里的内容,希望可以对不理解的朋友有些帮助,我也加深下自己的印象。也希望通过这样的方式使自己的能力有所提升!