代码整洁之道 上
2016-06-16 16:53
260 查看
我们都知道人,猫狗都是有寿命的,但是有多少程序猿们想过一段程序的寿命是多少呢,
其实从编程起源发展到今天整个历程的也没有多久,所以程序的寿命与人类相比较,其实是很短的。
尤其是当我们不注重 "保养" 维护的时候,程序的寿命有可能只有几岁就会寿终正寝了
所以我们要想对待自己的孩子一样,对待自己的程序,希望他健康成长,所以就有了我今天的主题:
代码整洁:
今天的主题是有两个
1.java代理:
在调用方面:
其实从这里来看,整个逻辑貌似清晰了一些,但是代码量过大,而且也可以通过其他方式达到这个功能,
所以具体的应用场景还是要再推敲使用的。
2. 面向方面编程
也许刚刚提到 面向方便编程大家还不了解是什么东西,如果你深入研究过Aspect,那你就可以跳过本文了。
有一个简单的场景:
我需要在所有的onClick方法中加入一段log,记录下对应的操作。
怎么办?一个一个加,那如果有一千的 click事件呢。岂不是要 累死吗?
所以这里就可以使用Aspect 了,
原理:在编译的时候,在每个onClick中插入我们想要插入的代码。
具体做法:
1.这个需要在编译的时候,单独进行配置,
2.在代码中加入响应代码,
这些东西在网上很多,就不再细说了,
主要说一下优势吧
极大的简化了我们看到的代码量,可以批量处理统一的操作,尤其是统计,日志这些没有技术含量但比较耗时的东西,非常实用。
其实从编程起源发展到今天整个历程的也没有多久,所以程序的寿命与人类相比较,其实是很短的。
尤其是当我们不注重 "保养" 维护的时候,程序的寿命有可能只有几岁就会寿终正寝了
所以我们要想对待自己的孩子一样,对待自己的程序,希望他健康成长,所以就有了我今天的主题:
代码整洁:
今天的主题是有两个
1.java代理:
public interface Bank { Collection<Account> getAccounts(); void setAccounts(Collection<Account> accounts); }
public class BankImpl implements Bank{ List<Account> accounts; @Override public Collection<Account> getAccounts() { return accounts; } @Override public void setAccounts(Collection<Account> accounts) { this.accounts = new ArrayList<Account>(); for(Account account : accounts){ this.accounts.add(account); } } }
public class BankProxyHandler implements InvocationHandler{ private Bank bank; public BankProxyHandler(Bank bank){ this.bank = bank; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { String methodName = method.getName(); if(methodName.equals("getAccounts")){ bank.setAccounts(getAccountFromDatabase()); return bank.getAccounts(); } else if(methodName.equals("setAccounts")){ bank.setAccounts((Collection<Account> )args[0]); setAccountToDatabase(); } return null; } protected Collection<Account> getAccountFromDatabase(){ //..... return null; } protected void setAccountToDatabase(){ //.... } }
在调用方面:
public class main { public void main(){ Bank bank = (Bank) Proxy.newProxyInstance(Bank.class.getClassLoader(),new Class[]{Bank.class},new BankProxyHandler(new BankImpl())); //.... bank.setAccounts(null); //.... bank.getAccounts(); } }
其实从这里来看,整个逻辑貌似清晰了一些,但是代码量过大,而且也可以通过其他方式达到这个功能,
所以具体的应用场景还是要再推敲使用的。
2. 面向方面编程
也许刚刚提到 面向方便编程大家还不了解是什么东西,如果你深入研究过Aspect,那你就可以跳过本文了。
有一个简单的场景:
我需要在所有的onClick方法中加入一段log,记录下对应的操作。
怎么办?一个一个加,那如果有一千的 click事件呢。岂不是要 累死吗?
所以这里就可以使用Aspect 了,
原理:在编译的时候,在每个onClick中插入我们想要插入的代码。
具体做法:
1.这个需要在编译的时候,单独进行配置,
2.在代码中加入响应代码,
这些东西在网上很多,就不再细说了,
主要说一下优势吧
极大的简化了我们看到的代码量,可以批量处理统一的操作,尤其是统计,日志这些没有技术含量但比较耗时的东西,非常实用。
相关文章推荐
- php中pdo数据库操作工具类
- java ArrayList与Vector
- JAVA 带缓存的输入/输出流
- 深入理解Java序列化
- 【合集】用Raspberry Pi(树莓派)打造各种服务器
- Python中的多行注释文档编写风格汇总
- type void func(int)
- Spring定时任务的几种实现
- 《Windows via C/C++》 学习笔记
- java异常处理三——怎么处理异常
- [leetcode] 【栈】 84. Largest Rectangle in Histogram
- java异常处理二——try-catch-finally执行顺序
- c++简单复数计算器
- 包含min函数的栈---重写栈实现特定的功能
- 在macOS上通过pyenv安装和切换多版本Python
- VB语言5“用户名”与“密码”实验报告
- 将树莓派作为自己的软件代码托管服务器!!!
- 【C++】使用共享内存实现进程间通信
- VB实验报告“找出二维数组n×m中的鞍点”
- matlab遍历指定路径下的文件夹