Java思想1——简单工厂模式

本文内容基于《大话设计模式》——程杰,建议大家读读原著
1 我们要考虑什么?
1)为了提高程序的可维护性,需要对各个模块之间进行解耦,要让它们之间的关联尽可能地小。避免修改其中一个模块的时候,需要对另一个模块大动干戈。
2)前端与后端要尽可能地分离解耦,原因还是与1)相同,提高程序的可维护性。前端是程序展示在用户面前的界面,而后端是每一个按钮或者是效果的具体实现。
3)对于前端的校验。这一块是基于程序安全性的考虑。不要忽视这一点。这不光包括用户输入的内容,还包括用户可能伪装成浏览器发送的给服务端的内容

2 关于前端的校验
对于第三条举两个的例子
1)把 0 最为除数。但这个很容易用try{}catch{}接住解决问题
2)sql 注入攻击,这是一个十分重要的例子。在java连接数据库时,由于使用了sql语法的字符串向数据库发送命令,如果不检验用户填写的数据就会引发危险。
比如

select * from 数据库名 where username='用户名' && password='密码'

该语句用于数据库中查询一条记录,而其中的用户名和密码可能是从前端通过GET或者POST方法得到的。
那么如果有别有用心的人,模拟浏览器使用GET和POST方法向服务器发送用户名和密码为:a’ or ‘a’='a
那么发送的sql语句就变成了

select * from 数据库名 where username='a' or 'a'='a' && password='a' or 'a'='a'

这条语句将查询数据库的所有记录,所以记录一定存在。此时,即便用户名和密码错误,用户仍旧可以登录进网站。

3 简单工厂
将界面的展示和功能的实现彼此分离开。并且将每一个功能包装成一个类。这样还不够,为了方便前端使用,我们还要把所有功能汇总成一个工厂,前端只能通过这个工程创建实例,在创建实例的时候全自动实现对应的功能。这样就实现了前后端的解耦。

比如我想设计一个计算器,计算器中有 123456789±*/ 这些按钮。这些按钮的界面由前端设计好,后端只负责用户点击某一个按钮时实现的功能。
比如点击了 + 和 - 这个按钮

public class add{
 public add(){
  在屏幕上显示加号;
 }
}

public class minus{
 public minus(){
  在屏幕上显示减号
 }
}

考虑到方便让前端调用,所以建立了简单工厂,即让前端通过一条命令就可以实现一个功能的操作
比如要求 Operation.createOperation("+") 这句话实现加操作,
Operation.createOperation("-") 这句话实现减操作。

public class Operation{
 public static void createOperation(String operation){
  switch(operation){
	 case "+":
	 	new add();
	 case "-":
	 	new minus();
	}
 }
}

这么做,那前端的负担就减小了,只要在 + 按钮的监听器内部写入这句话就行了。当这个 + 号功能出现了问题,前端不需要修改 + 按钮监听器的内容,只需要后端工程师检查 add 类有没有问题就好了。

但是需要注意,如果 add 类和 minus 类都有返回参数的话需要使得 add 和 minus 类继承同一个类或者实现同一个接口,比如 A ,然后在简单工厂内,返回 A 类或接口即可,此时前端接收需要强转。

你可能感兴趣的:(Java)