观察者模式
来源:互联网 发布:淘宝店铺充话费 编辑:程序博客网 时间:2024/06/05 11:31
概念
观察者模式(Observer)完美的将观察者和被观察的对象分离开。举个例子,用户界面可以作为一个观察者,业务数据是被观察者,用户界面观察业务数据的变化,发现数据变化后,就显示在界面上。面向对象设计的一个原则是:系统中的每个类将重点放在某一个功能上,而不是其他方面。一个对象只做一件事情,并且将他做好。观察者模式在模块之间划定了清晰的界限,提高了应用程序的可维护性和重用性。
应用观察者模式的实例
//HttpUtils 是实现了数据的处理的工具类,数据处理完毕后,将结果返回给主界面public class HttpUtils { /** * 相比于普通的带返回值的方法,观察者模式可以返回多个参数值 * 可以放入到不同的线程,虽然我不懂,哇哈哈 * @author Administrator * */ //定义接口的方法 public interface onHttpListener { public void onFail(int code); public void onSuccess(String line); } //定义静态方法,参数中包括接口的对象 public static void sendRequest(String urls, String param, onHttpListener listener) { try { //建立连接,向服务器发送数据 URL url = new URL(urls); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(1000); conn.setRequestMethod("POST"); conn.setRequestProperty("Accept-Charset", "utf-8"); conn.setDoOutput(true); conn.setDoInput(true); conn.getOutputStream().write(param.getBytes()); int code = conn.getResponseCode(); BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); //根据服务器返回值,执行不同的操作 String line = br.readLine(); if (code == HttpURLConnection.HTTP_OK) { //调用接口对象的方法,会将参数传递给实现接口的代码的字段,传递的字段是服务器的返回值, listener.onSuccess(line); } else { //调用接口对象的方法,会将参数传递给实现接口的代码的字段 listener.onFail(code); } } catch (MalformedURLException e1) { e1.printStackTrace(); listener.onFail(-1); } catch (IOException e1) { e1.printStackTrace(); listener.onFail(-1); } }}//在另一个主界面的类中实现了接口的方法,用于显示返回的值logInBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { loginRequest(); } private void loginRequest() { String name = nameText.getText(); String password = passwordText.getText(); String param = postLoginJson(name, password); System.out.println(param); String urls = "http://localhost:8080/MyFirWEB/CheckServlet"; //对接口的实现,HttpUtils 工具类中接口对象调用接口方法时,会将参数传递至此,在进行相关的处理 HttpUtils.sendRequest(urls, param, new onHttpListener() { @Override public void onSuccess(String line) { JSONObject obj = JSONObject.fromObject(line); int jsonCode = obj.getInt("jsonCode"); String message = obj.getString("message"); switch (jsonCode) { case LOGIN_SUCCESS: BackDialog.create(message); break; case LOGIN_FAIL: BackDialog.create(message); break; } } @Override public void onFail(int code) { BackDialog.create(code + ""); } }); } });
- 上面这种设计,实现了数据处理和界面显示的分离,
0 0
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 1069. The Black Hole of Numbers (20)【模拟】——PAT (Advanced Level) Practise
- LeetCode之Dynamic Programming题目汇总
- JSP九大内置对象
- DICOM:docker实现DICOM服务虚拟化
- Java 匿名类
- 观察者模式
- ICE 迁移64位安装问题
- 1070. Mooncake (25)【贪心】——PAT (Advanced Level) Practise
- uva10400
- c++对象内存模型【内存布局】
- 运算符重载相关代码
- 久违了,我的hibernate
- 欢迎使用CSDN-markdown编辑器
- SpringMVC源码总结(一)HandlerMapping和HandlerAdapter入门