观察者模式

来源:互联网 发布:淘宝店铺充话费 编辑:程序博客网 时间: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
原创粉丝点击