BaseAdapter.notifyDataSetChanged()的实现涉及到设计模式-观察者模式,详情请参考我之前的博文设计模式之观察者模式 Ok,回到notifyDataSetChanged进行源码分析, Adapter本身不是被观察者Observable,而是adapter里面有一个被观察者DataSetObservable mDataSetObservable public void notifyDataSetChanged() { mDataSetObservable.notifyC…
spring是目前使用最为广泛的Java框架之一.虽然spring最为核心是IOC和AOP,其中代码实现中很多设计模式得以应用,代码看起来简洁流畅,在日常的软件设计中很值得借鉴.以下是对一些设计模式的理解以及源码解析,希望能给大家对设计模式的理解有所帮助. 观察者模式:发布/订阅 更多设计模式更新中..... (基于spring-4.3.23.RELEASE分析) 1.观察者模式: 发布/订阅 如对观察者模式还不是很有概念,可以点击这里.spring中ApplicationEvent事件通知就是…
我们在前面分析客户端引用的时候会看到如下这段代码: // 产生开始调用事件 if (EventBus.isEnable(ClientStartInvokeEvent.class)) { EventBus.post(new ClientStartInvokeEvent(request)); } 这里用EventBus调用了一下post方法之后就什么也没做了,就方法名来看是发送了一个post请求,也不知道发给谁,到底有什么用. 所以这一节我们来分析一下EventBus这个类的作用. 首先我们来看一下…
在文章:JAVA设计模式-动态代理(Proxy)示例及说明中,为动态代理设计模式举了一个小小的例子,那么这篇文章就来分析一下源码的实现. 一,Proxy.newProxyInstance方法 @CallerSensitive public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h) throws IllegalArgumentException{ /…
原型模式 1 克隆羊问题 现在有一只羊 tom,姓名为: tom, 年龄为:1,颜色为:白色,请编写程序创建和 tom 羊 属性完全相同的 10 只羊. 2 传统方式解决克隆羊问题 1) 思路分析(图解) Sheep类 package com.lin.prototype; public class Sheep { private String name; private int age; private String color; public String getName() { return…
1)单例模式保证了 系统内存中该类只存在一个对象,节省了系统资源,对于一些需要频繁创建销毁的对象,使用单例模式可以提高系统性能 2)当想实例化一个单例类的时候,必须要记住使用相应的获取对象的方法,而不是使用 new 3)单例模式使用的场景:需要频繁的进行创建和销毁的对象.创建对象时耗时过多或耗费资源过多(即:重量级对象),但又经常用到的对象.工具类对象.频繁访问数据库或文件的对象(比如数据源.session 工厂等) 单例设计模式八种方式 1)饿汉式(静态常量) 2)饿汉式(静态代码块) 3)懒…
1 豆浆制作问题 编写制作豆浆的程序,说明如下: 1) 制作豆浆的流程 选材--->添加配料--->浸泡--->放到豆浆机打碎 2) 通过添加不同的配料,可以制作出不同口味的豆浆 3) 选材.浸泡和放到豆浆机打碎这几个步骤对于制作每种口味的豆浆都是一样的 4) 请使用  模板方法模式  完成 (说明:因为模板方法模式,比较简单,很容易就想到这个方案,因此就直接使用, 不再使用传统的方案来引出模板方法模式 ) 2 模板方法模式基本介绍 基本介绍 1) 模板方法模式(Template Met…
1 智能生活项目需求 看一个具体的需求 1) 我们买了一套智能家电,有照明灯.风扇.冰箱.洗衣机,我们只要在手机上安装 app 就可以控制对这些家电工作. 2) 这些智能家电来自不同的厂家,我们不想针对每一种家电都安装一个 App,分别控制,我们希望只要一个 app 就可以控制全部智能家电. 3) 要实现一个 app 控制所有智能家电的需要,则每个智能家电厂家都要提供一个统一的接口给 app 调用,这时 就可以考虑使用命令模式. 4) 命令模式可将"动作的请求者"从"动作的执…
1 看一个具体的需求 编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院, 一个学院有多个系.如图: 2 传统的设计方案(类图) 3 传统的方式的问题分析 1) 将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层次的 2) 实际上我们的要求是 :在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系, 因此这种方案,不能很好实现的遍历的操作 3) 解决方案:=> 迭代器模式 4 迭代器模式基本介绍 基本介绍 1…
1 天气预报项目需求,具体要求如下: 1) 气象站可以将每天测量到的温度,湿度,气压等等以公告的形式发布出去(比如发布到自己的网站或第三方). 2) 需要设计开放型 API,便于其他第三方也能接入气象站获取数据. 3) 提供温度.气压和湿度的接口 4) 测量数据更新时,要能实时的通知给第三方 2 天气预报设计方案 1-普通方案 WeatherData 类 传统的设计方案 代码实现 package com.lin.observer; /** * 显示当前天气情况(可以理解为气象站的网站) * @D…