Android设计模式---观察者模式小demo(一)
2024-10-16 13:05:30
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
这样当我们被观察的对象改变时候,观察者可以随着被观察的对象改变而改变,和接口回调类似~~~~
最新文章
- 管道命令和xargs的区别(经典解释)
- Python模块之optparse
- 深入Linux网络核心堆栈(对于netfilter的用法和讲解)
- nginx upstream的分配方式
- 使用Qt实现简单的图片预览效果 good
- mysql 分区信息查看
- Xvfb+YSlow+ShowSlow搭建前端性能测试框架 - 前端技术 | TaoBaoUED
- javascript技术难点之this、new、apply和call详解
- 485. Max Consecutive Ones
- GUI(JTabel表格)
- Android的图片,字符串,demin,color,以及Array,boolean,Integer资源的使用-android学习之旅(五十四)
- PHP之static静态变量详解
- 超简单的全新win10安装
- luogu P2515 [HAOI2010]软件安装
- 如何将在线电子书保存为pdf格式
- 使用java中replaceAll方法替换字符串中的反斜杠
- 2527: [Poi2011]Meteors[整体二分]
- java读取大容量excel之一
- libevent学习文档(二)eventbase相关接口和参数
- FireBug与FirePHP