之前浏览了一遍大话设计模式,看的激情四射,感觉写的很好,但是瞄了一遍感觉收获不多,于是决定手敲遍各种模式代码,今天敲了一遍简单工厂模式代码,收获满满,获益良多。
引用书中标题的一句话:
代码无错就是优? --------------------------简单工厂模式
首先是一个实现计算器的代码,
通过实现计算器代码,对比自己写的和要用简单工厂模式的对比了下:发现可维护性,可复用性,可扩展性和灵活性方面都不如按照简单工厂模式设计的。
其实面向对象的分析设计编程思想就是考虑通过封装,继承,多态把程序的耦合度降低。
编程的一个原则就是尽可能的去避免重复。
我们需要的是复用而不是复制。
简单工厂模式的深入理解:
简单工厂模式要解决的问题是如何去实例化一个合适的对象。其核心思想就是有一个专门的类来负责创建实例的过程。
在这里还稍稍接触了下UML类图。好像画不了在这!!!
然后直接上代码(java)
//操作类
public class Operation { private double double_numberA; private double double_numberB; public double getDouble_numberA() { return double_numberA; } public void setDouble_numberA(double double_numberA) { this.double_numberA = double_numberA; } public void setDouble_numberB(double double_numberB) { this.double_numberB = double_numberB; } public double getDouble_numberB() { return double_numberB; } public double getResult(double double_numberA, double double_numberB){ double result = 0; return result; } }
//继承操作类的加法类,减法类,乘法类,除法类
public class OperationAdd extends Operation{ @Override public double getResult(double numberA, double numberB){ double result = 0; result = numberA + numberB; return result; } }
public class OperationSub extends Operation { @Override public double getResult(double numberA, double numberB){ double result = 0; result = numberA - numberB; return result; } }
public class OperationMul extends Operation { @Override public double getResult(double numberA, double numberB){ double result = 0; result = numberA * numberB; return result; } }
public class OperationDiv extends Operation { public double getResult(double numberA, double numberB){ double result = 0; if(numberB == 0){ System.out.print("除数不能是0"); }else{ result = numberA/numberB; } return result; } }
//操作工厂类
public class OperationFactory { public Operation createOperation(String operate,double numberA, double numberB){ 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; } }
至于界面操作代码就没有写的必要了。。。。。
总结
对于简单工厂模式的业务背景
个人觉得首先要考虑能抽象出哪些类,其次要建个工厂实例化类的对象,还有就是搞一个父类或接口让子类去重写父类的方法。
找了个简单工厂模式的实际应用场景摘自别人的博客《编程是一门技术更加是一门艺术》
简单工厂模式的实际应用简介:
作为一个最基本和最简单的设计模式,简单工厂模式却有很非常广泛的应用,我们这里以Java中的JDBC操作数据库为例来说明。
JDBC是SUN公司提供的一套数据库编程接口API,它利用Java语言提供简单、一致的方式来访问各种关系型数据库。Java程序通过JDBC可以执行SQL语句,对获取的数据进行处理,并将变化了的数据存回数据库,因此,JDBC是Java应用程序与各种关系数据进行对话的一种机制。用JDBC进行数据库访问时,要使用数据库厂商提供的驱动程序接口与数据库管理系统进行数据交互。
客户端要使用使用数据时,只需要和工厂进行交互即可,这就导致操作步骤得到极大的简化,操作步骤按照顺序依次为:注册并加载数据库驱动,一般使用Class.forName();创建与数据库的链接Connection对象;创建SQL语句对象preparedStatement(sql);提交SQL语句,根据实际情况使用executeQuery()或者executeUpdate();显示相应的结果;关闭数据库。