Android设计模式---观察者模式小demo(一)
1,今天刚好看到了设计模式这一块来,而观察者模式是我一直想总结的,先来看看观察者模式的简单的定义吧 “当一个对象改变时,他的所有依赖者都会受到通知,并自动更新。” 一般我们项目中就是用在用户登录这一块,一些模块是只有用户登陆后才能进行浏览和进行操作的,现在以用户登录和未登录状态来举个栗子。
从大的方面来看,一般观察者模式存在一下四个基本的类:
抽象主题:抽象主题对象一般是一个接口,且里面包含最基础的添加观察者对象、移除观察者对象、通知观察者状态改变。
具体主题对象:针对主要是这个功能是用来干什么的,并实现上面抽象主题的基本的几个抽象方法。具体的操作试本次功能来定。
抽象观察者:抽象观察者一般是一个接口,且里面包含当被观察者的某一属性改变的时候去调用的方法。
具体的观察者:可以有多个,实现抽象观察者的方法。并实现自己的逻辑。
ok,既让我们已经有这个大的思路就来一点一点创建我们的代码吧···
首先常见抽象主题,本次的主题是用户的登录状态,创建一个Function的类来当抽象主题
package com.qianmo.VerificationCode.Observer; /**
* Created by wangjitao on 2016/10/13 0013.
*/
public interface Function {
/**
* 添加
*/
public void addObserver(Observer observer); /**
* 移除
*/
public void removeObserver(Observer observer); /**
* 通知观察者更新
*/
public void notifyObserver(); }
这里我们观察者的抽象类Observer
package com.qianmo.VerificationCode.Observer; /**
* Created by wangjitao on 2016/10/13 0013.
* 所有观察者需要实现此接口
*/
public interface Observer {
public void upLoginTag(boolean isLogin);
}
具体的主题对象LoginFuntion,实现Funtion接口
package com.qianmo.VerificationCode.Observer; import java.util.ArrayList;
import java.util.List; /**
* Created by wangjitao on 2016/10/13 0013.
*/
public class LoginFunction implements Function { private List<Observer> observers = new ArrayList<>(); private boolean isLogin; @Override
public void addObserver(Observer observer) {
observers.add(observer);
} @Override
public void removeObserver(Observer observer) { } @Override
public void notifyObserver() {
for (Observer observer : observers) {
observer.upLoginTag(isLogin);
}
} public void setLoginTag(boolean isLogin) {
this.isLogin = isLogin;
notifyObserver();
} }
现在创建两个观察者对象,一个是购物车,当用户没登录的时候是不让进入购物车的,而是订单,同理。
ShopCatObserver
package com.qianmo.VerificationCode.Observer; /**
* Created by Administrator on 2016/10/13 0013.
*/
public class ShopCatObserver implements Observer{
public ShopCatObserver(Function function){
function.addObserver(this);
} @Override
public void upLoginTag(boolean isLogin) {
System.out.println("购物车得到的登录状态: -->" + isLogin);
}
}
OrderObserver
package com.qianmo.VerificationCode.Observer; /**
* Created by Administrator on 2016/10/13 0013.
*/
public class OrderObserver implements Observer {
public OrderObserver(Function function) {
function.addObserver(this);
} @Override
public void upLoginTag(boolean isLogin) {
System.out.println("订单得到的登录状态: -->" + isLogin);
}
}
这样我们的基本代码就写完了,现在添加一个测试类来测试测试
package com.qianmo.VerificationCode.Observer; /**
* Created by wangjitao on 2016/10/13 0013.
*/
public class TestObserver { public static void main(String[] args) { LoginFunction loginFunction = new LoginFunction();
ShopCatObserver shopCatObserver = new ShopCatObserver(loginFunction);
OrderObserver orderObserver = new OrderObserver(loginFunction); loginFunction.setLoginTag(false); }
}
看一下我们控制台打印的信息
购物车得到的登录状态: -->false
订单得到的登录状态: -->false
这时候将loginFunction.setLoginTag(false);换成loginFunction.setLoginTag(true); 再看看打印结果
购物车得到的登录状态: -->true
订单得到的登录状态: -->true
这样当我们被观察的对象改变时候,观察者可以随着被观察的对象改变而改变,和接口回调类似~~~~
Android设计模式---观察者模式小demo(一)的更多相关文章
- Android -- 自定义View小Demo,动态画圆(一)
1,转载:(http://blog.csdn.NET/lmj623565791/article/details/24500107),现在如下图的效果: 由上面的效果图可以看到其实是一个在一个圆上换不同 ...
- Android设计模式-观察者模式
原文地址 http://blog.csdn.net/qq_25806863/article/details/69218968 观察者模式是一种使用频率非常高的设计模式,最常用的地方就是订阅-发布系统. ...
- Android实现登录小demo
安卓,在小编实习之前的那段岁月里面,小编都没有玩儿过,如果说玩儿过,那就是安卓手机了,咳咳,敲登录的时候有种特别久违的熟悉,这种熟悉的感觉就和当时敲机房收费系统一样,那叫一个艰难啊,不过小编相信,在小 ...
- Android设计模式—观察者模式
装载请标明出处:https://www.cnblogs.com/tangZH/p/11175120.html 观察者模式 说白了,就是一个对发生改变,所有依赖于它的对象也发生改变,这是一对多的关系. ...
- Android设计模式—— 观察者模式(以及EventBus的简单使用)
1.概述 观察者模式最常用的地方是GUI系统.订阅-发布系统.观察者模式的一个重要作用就是解耦,将观察者和被观察者解耦,使得他们之间的依赖性更小. 2.定义 定义对象间的一种一对多依赖关系,使得每当一 ...
- Android -- 自定义View小Demo,绘制四位数随机码(一)
1,现在有这样一个需求,实现显示随机随机数可能在代码中直接很简单的就实现了,但是现在我们直接自定义View来实现这个效果,那么我们来分析一波吧,我们允许开发者自己设置这个textview的大小,颜色, ...
- Android -- 自定义View小Demo,绘制钟表时间(一)
1,昨天刚看了hongyang大神推荐的自定义时钟效果(传动门:http://www.jianshu.com/users/a45d19d680af/),效果还是不错的,自己又在github上找了找,发 ...
- Android -- 自定义View小Demo,关于Rect绘制Android机器人(一)
1,关于Rect和RectF类的区别以前一直没有去关注它,刚刚了解了一下才知道都是用来确定矩形的区域,不过Rect是int类型的坐标而RectF是float类型的坐标,所以说RectF要更加精确.现在 ...
- Android -- 自定义View小Demo(一)
1,现在要实现下图的简单效果,很简单 ,就是使用paint在canvas上绘制5中不同颜色的圆圈,效果图如下: 这是绘制基本图形一种最简单的方法,下面是它的代码 ,注释写的很详细,也就不去讲解了 M ...
随机推荐
- 在windows下创建一个Mongo服务
首先需要下载mongo的安装包 cmd.exe 这个需要用管理员权限打开 进入到mongo的安装目录 首先到C盘根据下面的命令手动创建一个 Data 文件夹 在Data 里面创建一个db文件夹一个lo ...
- java JDK8 学习笔记——助教学习博客汇总
java JDK8 学习笔记——助教学习博客汇总 1-6章 (by肖昱) Java学习笔记第一章——Java平台概论 Java学习笔记第二章——从JDK到IDEJava学习笔记第三章——基础语法Jav ...
- GIT 在本地保存账户和密码
原文链接:http://www.jianshu.com/p/908591004f3b 解决方法,在本地的工程文件夹的.git下打开config文件 添加: [credential] helper = ...
- CSS布局一
CSS布局一 实例一(居中) div#container{ width:960px; height:650px; margin:0 auto; border:1px solid #ccc; /*就是说 ...
- Oracle一个实例配置多个监听
要想给一个Oracle实例配置多个监听,首先要定义多个监听器,因为是多个监听,势必会有一些监听端口不是1521. 现在服务端的listener.ora文件中定义如下监听器: LISTENER = (D ...
- zabbix监控activemq队列脚本
公司业务使用activemq5.9.1消息队列,由于队列阻塞导致程序端口无响应,并且telnet无法连通.经过over 1 hour的排查,最终定位原因activemq导致.遂写了一个监控active ...
- less 命令(转)
less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大.less 的用法比起 more 更加的有弹性.在 more 的时候,我们并没有办法向前面翻 ...
- Failed to load JavaHL Library解决方法
进来的看官使用的是win7吧?!是64位的吧!?安装了eclipse的subclipse插件了吧!每次用到SVN插件时都会弹出如下的对话框,虽然不影响使用但是很不爽是不是啊?LZ也是一个有丁点儿强迫症 ...
- Java遇见HTML——JSP篇之JSP指令与动作元素
一.include指令(如:<%@include file="..."%> ) 示例: Date.jsp <%@page import="java.te ...
- Windows Security 学习笔记
对于Windows 在 Security 方面的学习. 纯兴趣. UNIX 的另外开一条路线学习. 话说今天查gpedit.msc的资料的时候发现 M$ 官网上怎么连个文档都没有. 后来才点了 gpe ...