(1)代码无错就是优?——简单工厂模式

最后更新于:2022-04-01 14:30:06

### 《大话设计模式》 前一段时间读过一阵这本书,但是那是还没有什么面向对象的概念,而且对于设计模式什么的都一窍不通。。。现在感觉懂一点了,所以想写一点东西,和大家一起分享一下我的感受! 以前感觉代码只要实现了自己想要达到的功能就ok了,哪还管什么复用性,耦合性啊,可是开发时间越久就越感觉设计模式是如此的重要,尤其现在越来越多的多人开发项目,要是设计模式用好了,可是少些很多的代码,而且可以让 复制粘贴 消失在我们的代码里!!! 从今天开始我尽量每两天读一章《大话》,然后写一篇博文与大家分享,法定节假日除外。。。 代码的话我就根据《大话》然后自己写java的伪代码,在最后会用一个自己在现实中碰到的问题来解释用处。 ### 封装&多态&继承 这是面向对象的三大特性,通过这三者,可以把程序的藕合度降低,增加程序的复用性,而且容易修改和扩展! 就已书上计算器的代码为例 ~~~ public class Operation { //存放属性,及用于计算的两个数get,set方法和获得答案的方法(被重写的方法) } public class AddOper extends Operation { //重写获得答案的方法——做两个数的加法运算 } public class SubOper extends Operation { //重写获得答案的方法——做两个数的减法运算 } public class MulOper extends Operation { //重写获得答案的方法——做两个数的乘法运算 } public class DivOper extends Operation { //重写获得答案的方法——做两个数的除法运算 } ~~~ 这样子写完后想增加方法就很简单了,只需要增加一个类去继承Operation类然后重写计算的方法就可以了,而且这几个类 都是可以重复调用的,在控制台程序,界面程序,手机程序中都可以 ### 简单工厂模式 感觉简单工厂模式多用于 解决对象的创建 问题。比如你写了一些类,但是到底创建哪一个类?实例化对象的时候会不会因为创建太多了弄混?这个时候就应该考虑用一个 单独的类来做这个创建实例的过程(摘抄书上) 这就是工厂! ~~~ public class OperFactory { public static Operation createOper (String opreate) { // 通过传入的符号判断调用哪一个方法最后返回当前需要调用的对象 switch(opreate) { case "+": return new AddOperation();//加法对象 case "-": case "*": case "/": } } } ~~~ 由于这几个操作类都是继承于父类Operation,所以在使用时只需要用一个Opreation去接收就可以了 ~~~ Operation oper = OperFactory.createOper("+"); ~~~ 这样这个oper就是加法类了,如果需要乘法,除法,减法,只需要往工厂对象中传参数就可以了 ### 举例说明 在开发过程中会碰到很多需要用到工厂,例如在网络访问中,最近就接了一个这样的项目,需要去访问服务器获取数据,我觉得用工厂模式会好很多,网络访问属性是差不多的,差别只在于访问的地址和调用的方法有一点点区别,所以就可以抽一个父类出来,如果增加一个需要访问的页面,那么增加一个类,再增加工厂的选项就可以了,这样增加或者修改当前类,对于别的类就不会有影响! ~~~ public class Net { URL; doURL(); } public class Baidu extends Net { doURL() { 打开贴吧! } } public class Google extends Net { doURL() { 打开Google地图! } } 。。。。 public class NetFac { public static createNet(标签) { 根据标签判断生成哪一个对象 } } ~~~ 也许大家现在看,可能觉得代码很冗余,感觉没多大的好处,但是很简单的一个例子,你现在去调用Net,那么你只需要知道传一个参数给工厂类就够了,完全不需要知道有哪一些类,这在多人开发的时候有很大的好处,因为这样写,两人互不影响,你去实现你的网页类,我只管调用工厂类就可以了,这个例子只是我浅显的理解,它的好处真的需要大家自己再编码中才能体会到!!! ### 总结 还是比较推荐大家去看一下《大话》这本书,感觉这本书说的内容都比较浅显,对于设计模式的解释也比我好和专业许多,我写这个博文的意义只在于增强自己对于设计模式的理解,同时举个例子可以供大家参考一下,设计模式再别的地方的用途!
';