设计模式
文章平均质量分 93
gubojun
我是君
展开
-
设计模式--六大设计原则
最近工作不是很忙,闲下来的时间来学习下23种设计模式。工作中有时会感觉项目有新功能需要开发时,代码不好改;有时看一份新的项目代码会感觉难以阅读、不知所云,这些情况我认为可能就是开发人员写代码的时候运用的设计模式不好或者就没有注意到需要使用设计模式来提高项目的可读性和可维护性,看难以读懂不好修改的代码我想我们都会很难过。说到可维护性,作为一个android开发,在开发初期应用一个好的设计框架也很...原创 2017-03-14 17:08:30 · 410 阅读 · 0 评论 -
设计模式--享元模式
Java工程源码 类图 定义 使用共享对象可有效地支持大量的细粒度的对象 优点 - 大大减少应用程序创建的对象,降低程序内存的占用,增强程序的性能 缺点 - 提高了系统的复杂性,需要分离出外部状态和内部状态 使用场景 - 系统中存在大量相似对象 - 细粒度的对象都具备较接近的外部状态,且内部状态与环境无关 - 需要缓冲池的场景 注原创 2017-12-27 19:49:13 · 226 阅读 · 0 评论 -
设计模式--策略模式
Java工程源码 类图 定义 定义一组算法,将每个算法封装起来,并且使它们之间可以互换 优点 - 算法可以自由切换 - 避免使用多重条件判断 - 扩展性良好 缺点 - 策略类数量增多 每个策略一个类,复用的可能性很小,类数量增多 - 所有的策略多需要对外暴露 使用场景 - 多个类只有在算法或行为上稍有不同的场景原创 2017-12-28 09:11:27 · 200 阅读 · 0 评论 -
设计模式--模板方法模式
Java工程源码 类图 定义 定义一个操作中的算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 优点 - 封装不变部分,扩展可变部分 - 提取公共部分代码,便于维护 - 行为由父类控制,子类实现 缺点 - 根据习惯,抽象类负责声明最抽象,最一般的事务属性方法,实现类完成具体的事物属性和方法原创 2017-12-28 09:40:10 · 213 阅读 · 0 评论 -
设计模式--迭代器模式
Java工程源码 类图 定义 提供一种方法访问一个容器对象中各个元素,而又不需要暴露该对象的内部细节 优点 - 它支持以不同的方式遍历一个聚合对象。 - 迭代器简化了聚合类。 - 在同一个聚合上可以有多个遍历。 - 在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码。 缺点 - 由于迭代器模式将存储数据和遍历数据的职责原创 2017-12-28 10:20:42 · 204 阅读 · 0 评论 -
设计模式--责任链模式
Java工程源码 类图 定义 使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。 将这些对象连成一条链,并沿着这条链传递该请求,知道有对象处理它为止 优点 - 将请求和处理分开,两者解耦,提高系统灵活性 缺点 - 性能问题 每个请求都是从链头遍历到链尾,链比较长时,存在性能问题 - 调试不方便 因为采原创 2017-12-28 14:15:52 · 182 阅读 · 0 评论 -
设计模式--命令模式
Java工程源码 类图 定义 将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能 优点 - 类间解耦 调用者Invoker与接受者receiver之间没任何依赖关系,调用者不需要了解到底哪个接收者执行 - 可扩展性 command子类可非常容易的扩展 - 命令模式结合其他模式会更原创 2017-12-28 17:30:59 · 190 阅读 · 0 评论 -
设计模式--备忘录模式
Java工程源码 类图 定义 在不破坏封装性的前提下,捕获一个对象内部状态,并在该对象之外保存这个状态。 这样以后就 可将该对象恢复到原先保存的状态 使用场景 - 需要保存和恢复数据的相关状态场景 - 提供一个可回滚操作 - 需要监控的副本场景中 - 数据库连接的事务管理就是用的备忘录模式 注意事项 备忘录的性能:不要在频繁建立备份的场原创 2017-12-28 17:45:29 · 185 阅读 · 0 评论 -
设计模式--状态模式
Java工程源码 类图 定义 当一个对象内在状态改变时允许其改变行为,这个对象看起来像改变了其类 优点 - 结构清晰 - 遵循设计原则。很好的体现了开闭原则和单一职责原则 - 封装性非常好 缺点 - 子类会很多,每个状态都有一个子类 使用场景 - 行为随状态改变而改变的场景 - 条件,分支判断语句的替代者 注意事项 状原创 2017-12-28 18:10:10 · 182 阅读 · 0 评论 -
设计模式--访问者模式
Java工程源码 类图 定义 封装一些作用于某种数据结构中的各元素操作,它可以在不改变数据结构的前提下 定义作用于这些元素的新的操作 优点 - 符合单一职责原则 Element子类和visitor职责分离 - 优秀的扩展性 - 灵活性非常高 缺点 - 具体元素对访问者公布细节 - 具体元素变更比较困难 - 违背了依赖倒原创 2017-12-28 18:37:28 · 195 阅读 · 0 评论 -
设计模式--中介者模式
Java工程源码 类图 定义 用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互– 优点 - 减少类间的依赖,把原有的一对多的依赖变成了一对一的依赖,降低了类间耦合性– 使用场景 适用于对象之间紧密耦合的情况。实际中的应用如MVC框架(Struts(Controller)就是一个中原创 2017-12-28 19:01:13 · 431 阅读 · 0 评论 -
设计模式--组合模式
Java工程源码 类图 定义 将对象组合成树形结构以表示部分 - 整体的层次结构,使得用户对单个对象和组合对象的使用具有一致性 优点 - 高层模块调用简单 高层模块不必关心自己处理的是单个对象还是整个组合结构 - 节点自由增加 缺点 - 场景类中,树枝和树叶使用时都需用起实现类,与依赖倒置原则冲突,没有面向接口编程 使用场景 -原创 2017-12-27 19:26:14 · 169 阅读 · 0 评论 -
设计模式--外观模式
Java工程源码 类图 定义 要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供 一个高层次的接口,使得子系统更易于使用 优点 - 减少系统的相互依赖。所有的依赖都是对门面对象的依赖,与子系统无关。 - 提高了灵活性。不管子系统内部如何变化,只要不影响门面对象,任你自由活动 缺点 - 不符合开闭原则:对修改关闭,对扩原创 2017-12-27 19:00:52 · 185 阅读 · 0 评论 -
设计模式--桥梁模式
桥接模式Java工程源码 类图 定义 - 将抽象和实现解耦,使得两者可以独立地变化 优点 - 抽象和实现分离 - 优秀的扩充能力 不管是增加抽象还是实现,都很容易 - 实现细节对客户透明 使用场景 - 不希望或不适合使用集成的场景 - 接口或抽象类不稳定的场景 - 重用性要求较高的场景 设计的颗粒度越细,则被重用的可能性就越大实现原创 2017-12-26 18:47:46 · 204 阅读 · 0 评论 -
设计模式--抽象工厂模式
抽象工厂模式Java工程源码 类图 定义 - 为创建一组相关或相互依赖的对象提供一个接口,而且无需指定它们的具体类 优缺点 - 优点:封装性,每个产品的实现类不是高层模块要关心的,它要关心的是接口或抽象类 - 缺点:产品族扩展非常困难,严重违反开闭原则 使用场景 - 一个对象族都有相同的约束 注意事项 - 抽象工厂模式,产品族扩展困难,但产品等原创 2017-12-26 19:05:45 · 198 阅读 · 0 评论 -
设计模式--单例模式
单例模式Java工程源码 类图 定义: 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例 优点: - 内存中仅一个实例,故减少了内存开支 - 由于只生成一个实例,故减少了系统性能开销(如读取配置,产生依赖对象等,利用常驻内存的方式,仅生成一个对象 - 可以避免对资源的多重占用(如只有一个实例存在,避免对同一资源文件同时写操作) 缺原创 2017-12-26 19:19:54 · 214 阅读 · 0 评论 -
设计模式--建造者模式
Java工程源码 类图 定义 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 优点 - 封装性 使用建造者模式可使客户端不必知道产品内部组成的细节 - 建造者独立,容易扩展 - 便于控制细节风险 由于具体的建造者是独立的,因此可对建造过程逐步细化,而不对其它模块产生影响 使用场景 - 相同的方法,不同的执行顺序,产生不同原创 2017-12-26 19:28:27 · 202 阅读 · 0 评论 -
设计模式--适配器模式
Java工程源码 类图 定义 将一个类的接口变换成客户端期待的另一种接口,从而使原本因接口不匹配而无法一起工作的两个类能够一起工作 优点 - 适配器角色可以让两个没有任何关系的类在一起运行 - 增加了类的透明性, target 目标角色具体实现委托给了源角色,这对高层模式是透明的 - 提高了类的复用度,源角色在原有系统中还是可以正常使用 -原创 2017-12-26 19:31:21 · 236 阅读 · 0 评论 -
设计模式--装饰器模式
Java工程源码 类图 定义 动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式相比生成子类更为灵活 优点 - 装饰类和被装饰类可以独立发展,而不会相互耦合 - 装饰模式是集成关系的一个替代方法,不管装饰多少层,其实现的还是 is-a 关系 - 装饰模式可以动态地扩展一个实现类的功能 缺点 - 多层装饰比较复杂 使用场原创 2017-12-26 19:36:32 · 188 阅读 · 0 评论 -
设计模式--观察者模式(发布订阅模式)
Java工程源码 类图 定义 定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新 优点 - 观察者和被观察者之间是抽象耦合。如此,则不管是增加观察者还是被观察者都易扩展 - 建立一套触发机制 观察者模式可以完美地实现链条形式 缺点 - 一个被观察者,多个观察者,开发和调试比较复杂 -原创 2017-12-26 19:40:03 · 632 阅读 · 0 评论 -
设计模式--工厂方法模式
Java工程源码 类图 定义 定义一个用于创建对象的接口,让子类决定实例化哪一个类。工程方法使一个类的实例化延迟到其子类 优缺点 - 良好的封装性,代码结构清晰。调用者只需知道产品类名,不必知道创建对的过程,降低了模块间的耦合 - 扩展性优秀。在新增产品的情况下,适当修改具体工厂类或扩展一个工厂类即可 - 屏蔽产品类。产品类的实现如何变化,调用者无需关心原创 2017-12-27 14:14:37 · 193 阅读 · 0 评论 -
设计模式--原型模式
Java工程源码 类图 定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 优点 - 性能优良 原型模式是在内存二进制流的拷贝,要比直接new一个对象性能好很多,特别是要在一个循环内产生大量对象时 - 逃避构造函数的约束 直接在内存中拷贝,构造函数不会执行 使用场景 - 资源优化场景 类初始化需要消耗非常多的资源时 - 性能原创 2017-12-27 16:29:14 · 158 阅读 · 0 评论 -
设计模式--代理模式
Java工程源码 类图 定义 为其它对象提供一种代理以控制对这个对象的访问 优点 - 职责清晰 真实的角色就是实现的业务逻辑,不用关心其他非本指责的事务 - 高扩展性 具体主题角色不管怎么变化,只要它实现了接口,代理类完全可以在不做任何修改的情况下使用 - 智能化 动态代理是最好的体现,即在运行阶段才指定实际代理对象(Struts如何把表原创 2017-12-27 18:36:46 · 218 阅读 · 0 评论 -
设计模式--解释器模式
Java工程源码 类图 定义 给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表 示来解释语言中的句子 优点 - 扩展性好,修改语法规则只要修改相应的非终结符表达式就可以了 缺点 - 容易引起类膨胀。每个语法都要产生一个非终结符表达式 - 采用递归方法,不易调试 - 效率问题。大量使用了循环和递归 注意事项原创 2017-12-29 14:29:16 · 219 阅读 · 0 评论