随笔分类 - 设计模式
摘要:首先说个题外话,《研磨设计模式》这本书占据很多设计模式书籍排行榜的榜首,但是这本书只印刷了一次,导致此书绝版,所以在淘宝和京东的购买价格翻了3倍 【简单工厂模式】 1.客户端根本就不应该知道具体的实现类是Impl,其实就是为了封装实现类,因而在具体实现类和客户端之间增加了一个工厂类,工厂类的作用就是
阅读全文
摘要:非空校验一直是一个麻烦的问题,此模式可以稍微缓解 例: 增加一个NullAnimal 这样在Person类中就不需要“animal!=null”这句话了,疑问我们提供了一个实现接口的所有方法,不会再产生null对象。 animal对象可能由MVC框架映射产生,我们只要定义一个默认的映射对象是Null
阅读全文
摘要:No1: 单一职责原则提出了一个编写程序的标准,用“职责”或“变化原因”来衡量接口或类设计得是否优良,但是“职责”和“变化原因”都是不可度量的,因项目而异,因环境而异。 No2: 在类中调用其他类时务必要使用父类或接口,如果不能使用父类或接口,则说明类的设计已经违背了LSP原则 No3: 如果子类不
阅读全文
摘要:需求:设计一个MVC框架 (以下可能摘要不全,后期整理) 架构图: * 核心控制器:MVC框架入口,负责接收和反馈HTTP请求 * 过滤器:Servlet容器内的过滤器,实现对数据的过滤处理 * 拦截器:对进出模型的数据进行过滤,不依赖系统容器,只过滤MVC框架内的业务数据 * 模型管理器:提供一个
阅读全文
摘要:创建类模式包括工厂方法模式、建造者模式、抽象工厂模式、单例模式和原型模式。 其中单例模式要保持在内存中只有一个对象,原型模式是要求通过复制的方式产生一个新的对象。 【工厂方法(抽象工厂) VS 建造者模式】 共产方法模式关注的是一个产品整体,但在建造者模式中,一个具体产品的产生是依赖各个部件的产生以
阅读全文
摘要:接上篇《设计模式之禅》--备忘录扩展:clone方式的备忘录 需求:对象全状态备份方案 发起人 BeanUtils工具类 备忘录角色 调用 结果 初始化状态 state1=中国stat2=强盛state3=繁荣 修改后状态 state1=软件stat2=架构state3=优秀 恢复后状态 state
阅读全文
摘要:接上篇《设计模式之禅》--策略扩展:策略枚举 需求:使用clone方式实现备忘录模式 发起人角色 备忘录管理员角色 上面两项合并 调用 结果 初始状态是:初始状态...修改后状态是:修改后的状态...恢复后状态是:初始状态 注意: 使用Clone方式的备忘录模式,可以使用在比较简单的场景或者比较单一
阅读全文
摘要:接上篇《设计模式之禅》--代理扩展:动态代理 需求:加减法计算 调用 关键 Calculator.ADD.exec(a, b)
阅读全文
摘要:接上篇《设计模式之禅》--代理扩展:强制代理 动态代理就是在实现阶段不用关心代理谁,而在运行阶段才指定代理哪一个对象。相对来说,自己写代理类的方式就是静态代理 面向切面编程(AOP)核心就是采用了动态代理机制 调用 结果 拓展: 调用
阅读全文
摘要:接上篇《设计模式之禅》--工厂方法扩展:实现单例 需求:就算你找到真实角色,也强制你使用指定代理 第一次尝试 结果 第二次尝试 结果 第三次尝试 结果
阅读全文
摘要:接上篇《设计模式之禅》--单例扩展:多例模式 需求:使用工厂方法模式实现单例模式 利用反射创建单例对象 还可以扩展单例构造器
阅读全文
摘要:需求:一个类只能产生两三个对象 运行结果如下
阅读全文
摘要:【简单工厂、工厂方法、抽象工厂、Builder模式的区别】 No1: 核心定义: 1)简单工厂模式:一个工厂方法创建不同类型的对象 2)工厂方法模式:一个具体的工厂类负责创建一个具体对象类型 3)抽象工厂模式:一个具体的工厂类负责创建一系列相关的对象 4)Builder模式:对象的构建与表示分离,它
阅读全文
摘要:No1: 享元模式是对象池的一种实现。享元模式用来尽可能减少内存使用量,它适合用于可能存在大量重复对象的场景,来缓存可共享的对象,达到对象共享、避免创建过多对象的效果,这样一来就可以提升性能、避免内存移除等。 No2: UI不能够在子线程中更新。因为并不是UI不可以在子线程更新,而是UI不可以在不是
阅读全文
摘要:No1: Activity继承于ContextThemeWrapper,继承于ContextWrapper,继承于Context。 No2: Context中方法的所有实现均由ContextImpl类承担。 No3: 启动一个Activity需要3个非常重要的对象:Application、Conte
阅读全文
摘要:No1: 模板方法模式包括:抽象类(其中定义了一系列顺序方法)、具体实现类A、具体实现类B 如果子类有实现不一样的细节,重写父类的某个方法即可 No2: AsyncTask对象调用execute方法后会依次执行onPreExecute、doInBackground、onPostExecute或onP
阅读全文
摘要:【状态模式】 No1: Wifi设置界面是一个叫做WifiSetting的Fragment实现的 No2: 在不同的状态下对于扫描Wifi这个请求的处理是完全不一样的。在初始状态下扫描请求被直接忽略,在驱动加载中状态下Wifi扫描请求被添加到延迟处理的消息列表,在驱动加载完成状态下扫描Wifi的请求
阅读全文
摘要:No1: 定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。 No2: 使用场景: 1)针对同一类型问题的多种处理方式,仅仅是具体行为有差别时 2)需要安全的封装多种同一类型的操作时 3)出现同一抽象类有多个子类,而又需要
阅读全文
摘要:No1: 4种MediaPlayer Factory分别会生成不同的MediaPlayer基类:StagefrightPlayer、NuPlayerDriver、MidiFile和TestPlayerStub。四者均继承与MediaPlayerBase。 No2: 抽象工厂模式在android源码中
阅读全文
摘要:No1: 对于一个应用程序来说,其真正的入口是在ActivityThread类中,ActivityThread中含有我们熟悉的main方法。ActivityThread是一个final类,不能被继承。当Zygote进程孵化出一个新的应用进程猴,会执行ActivityThread的main方法,mai
阅读全文