随笔分类 - 设计模式
摘要:1.什么是共享模式? 共享模式是一种结构型设计模式,它丢弃了在每个对象中保存所有数据的方式,通过共享多个对象所共有的相同状态,让我们能在有限的内存容量中载入更多的对象。 1.1 共享模式解决的问题 首先抛出一个问题: 假如我们要开发一个真实的粒子系统,开发完成后, 你推送提交了最新版本的程序, 并在
阅读全文
摘要:1.什么是原型模式? 原型模式是一种创建型模式,是我们能够复制已有对象而又无需使代码依赖他们所属类的一种设计模式。 1.1原型模式解决的问题 首先抛出一个问题: 如果我们有一个类型为Student的对象,并希望生成与其完全相同的克隆对象,我们该如何实现呢? 如果没有原型模式,我们可能的做法是: 首先
阅读全文
摘要:1.什么是建造者模式? 建造者模式是一种创建型设计模式,它能让我们将创建一个复杂对象的步骤分开,一步一步的建造好我们要创建的对象架子,在最后使用时生成实例对象。 该模式允许我们使用相同的创建代码生成不同类型的对象。 1.1 建造者模式能解决的问题 假设有一个复杂的类,在对其进行构造时需要对很多成员变
阅读全文
摘要:1.单例模式能解决啥问题? 首先,我们先来复习一下什么是单例模式: 单例模式是一种创建型设计模式, 让你能够保证一个类只有一个实例, 并提供一个访问该实例的全局节点。 那么问题来了? 什么样的类只能创建一个实例呢? 比如,在一个系统中,总有一些东西是全局共享且很少改变的。 比如数据库的url , p
阅读全文
摘要:1.工厂模式能解决啥问题? 我们考虑这个问题的时候就说明我们其实已经了解了工厂模式,我们想要知道工厂模式的具体应用场景,并灵活的在工作中使用它来提供工作效率。 1.1 复习工厂模式 工厂模式具体分为: 简单工厂:将创建一类对象的细节(new的过程)封装在一个类(工厂类)中,外界只需要通过这个工厂类根
阅读全文
摘要:1.装饰者模式能解决啥问题? 在讨论这个问题之前,我们先来复习下装饰者模式的定义: 装饰者模式动态的将责任附加到对象上。 如果要扩展功能,装饰者提供了比继承更有弹性的替代方案。 上面的定义中的关键是: 动态的将责任附加到对象上。 我们该如何理解这句话? 我们可以这样理解:有一个对象A,它有一个方法s
阅读全文
摘要:1.观察者模式能解决什么问题? 在考虑这个问题之前,我们先来复习一下观察者模式定义: 观察者模式定义了对象之间的一对多依赖,当一个对象改变状态时,它的所有依赖都会收到通知并自动更新。 看到这句话,我们要考虑一个问题: 对象之间的依赖,谁依赖谁,怎么判断哪个是依赖者,哪个是被依赖者?那个是一,那个是多
阅读全文
摘要:1.策略模式能解决什么问题? 前面学习了很多种设计模式,通过实际的例子来进行学习,好像确实在那个例子里解决了问题,但是我们现实中的需求和例子中的往往不一样,那么我们该如何判断现实项目中策略模式能解决什么问题呢? 这一节就策略模式的实用性迁移展开了一些讨论,纯属个人见解,仅供参考! 1.1 复习一下策
阅读全文
摘要:1.何为代理模式? 代理模式为另一个对象提供提供一个替身或占位符(代理对象)以控制对这个对象的访问。 简单来说,现在比如有一个对象A, 有一个对象B, 本来是对象B直接可以调用对象A实现某种功能的,但是由于特殊的原因对象B无法直接调用对象A来完成功能,而是通过对象C将对象A的调用封装后暴露接口给对象
阅读全文
摘要:我们需要了解如何利用RMI进行远程方法调用。 1.了解RMI 首先,RMI提供了客户辅助对象和服务辅助对象,为客户辅助对象创建和服务对象相同的方法。RMI的好处在于,我们不必自己写任何网络或I/O的代码。 客户程序调用远程方法就和运行在客户自己的本地JVM上对对象进行正常方法调用一样。 RMI提供了
阅读全文
摘要:1.什么是状态模式? 状态模式允许对象在内部改变时改变它的行为,对象看起来好像修改了它的类。 2.通过实际的需求来理解状态模式 2.1 一份来自万能糖果公司的需求 万能糖果公司正在研发最新的糖果机,他们的糖果机的工程师设计了如下状态转换图: 他们希望我们用java语言将这个状态转换图描述的功能实现,
阅读全文
摘要:1.什么是组合模式? 组合模式允许我们将对象组合成树形结构来表现 “整体/部分” 层次结构。 组合能让客户以一致的方式处理个别对象以及对象组合。 2.通过具体实例理解组合模式 如果上一节的迭代器模式是优雅驱动设计的话(不了解的同学强烈推荐先了解下:迭代器模式),那么下面的需求就是业务驱动设计了。 在
阅读全文
摘要:1.什么是迭代器模式? 迭代器模式提供一个方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的实现。 2.通过实例需求理解迭代器模式 2.1 项目总监Review到问题 在做项目的时候,技术总监在review代码的时候发现了一个奇特的现象,两个员工对一个实体类进行封装时的用法不一样,一个使用Li
阅读全文
摘要:1.什么是模板方法模式? 在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。 模板方法模式使得子类可以在不改变算法结构的情况下重新定义算法的某些步骤。 2.根据实例的程序案例学习模板方法模式 2.1 简化重复的代码 现在我司的一个客户: 知名饮料制作商 觉得自己的饮料制作系统的源代码有些繁重
阅读全文
摘要:1.什么是外观模式? 外观模式提供一个统一的的接口,用来访问子系统中的一群接口。 外观定义了一个高层接口,让子系统更容易被使用。 2.通过实际的例子来学习外观模式 需求来啦: 有一天,一位客户拿着这些类过来,让我们帮他设计一个自动化的家庭影院控制系统来帮他解决每次享受电影之前需要自己去一个一个开启机
阅读全文
摘要:1.什么是适配器模式? 将一个类的接口转换成客户期望的另一个接口的设计模式,我们称之为适配器模式。 适配器可以让原本接口不兼容的类可以变得兼容。 2. 通过具体的例子学习适配器模式 现在又两个接口: Duck接口和Turkey接口,分别表示鸭子接口和火鸡接口 已知鸭子飞的速度是火鸡的5倍,鸭子的叫声
阅读全文
摘要:1.什么是命令模式? 命令模式将请求封装成对象,以便使用不同的请求,队列或者日志来参数化其他对象。 命令模式也支持可撤销的操作。 2.通过具体的需求理解命令模式 2.1 一份来自家电自动化公司的需求 你好,我们自动化公司希望贵公司为我们设计一个家电自动化遥控器的API。我们将附上一个创新遥控器的原型
阅读全文
摘要:1.什么是单例模式? 确保一个类只有一个实例,并提供一个全局访问点。 这句话什么意思呢? 就是利用这个设计模式可以让指定的类在它的整个使用周期上只生产出一个实例对象并存放在内部,且提供一个公共方法去访问这个对象。 2.根据具体的例子理解单例模式 2.1 单例类设计 员工A在写代码的时候发现自己写一个
阅读全文
摘要:1.什么是抽象工厂模式? 提供一个接口,用于创建相关对象或依赖对象的家族,而不需要明确指定具体类。 通过依赖注入来降低耦合。 2.结合工厂模式的披萨实例来理解抽象工厂模式 2.1 具体设计 尽管上一节的工厂模式设计已经好像看着可以,但是,我们好像也能明显的发觉到对于具体的PizzaStore的编写,
阅读全文
摘要:1.什么是工厂模式? 工厂模式 简单工厂: 将创建一类对象的细节封装在一个对象中,外界只需要通过这个对象(工厂对象)根据特定的参数直接获取想要的对象即可。 工厂方法模式:定义一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。 2.通过具体的需求实例来理解 2.1
阅读全文