设计模式
文章平均质量分 72
四级五次郎
不负韶华,砥砺前行
展开
-
23种设计模式之备忘录模式
备忘录模式是一种行为模式,该模式用于保存对象当前状态,并且在之后可以再次恢复到此状态备忘录模式的定义 在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样,以后就可将该对象恢复到原先保存的状态。备忘录模式的使用场景 a.需要保存一个对象在某一个时刻的状态或部分状态 b.如果用一个借口来让其他对象得到这些状态,将会暴露对象的实现细节并破坏对象的封装性,一个对象不希望外原创 2017-06-05 18:15:01 · 336 阅读 · 0 评论 -
23种设计模式之享元模式
享元模式是对象池的一种实现,用来尽可能减少内存使用量,它适合用于可能存在大量重复对象的场景,来缓存可共享的对象,达到对象共享,避免创建过多对象的效果,这样就可以提升性能、避免内存溢出等。 享元对象中的部分状态是可以共享的,可以共享的状态称为内部状态,内部状态不会随着环境变化,不可共享的状态则称为外部状态,它们会随着环境的改变而改变。享元模式定义 使用共享对象可有效地支持大量的细粒度的对象使原创 2017-06-20 14:19:56 · 401 阅读 · 0 评论 -
23种设计模式之访问者模式
访问者模式是一种将数据操作与数据结构分离的设计模式,它是23种设计模式中最复杂的一个,但是使用频率并不高访问者模式的定义 封装一些作用于某种数据结构中的各元素的操作,它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作。使用场景 a. 对象结构比较稳定,但经常需要在此对象结构上定义新的操作 b. 需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免这些操作“污染”这原创 2017-06-09 16:34:50 · 432 阅读 · 0 评论 -
23种设计模式之外观模式
外观模式在开发过程中的运用频率非常高,通过一个外观类使得整个系统的接口只有一个统一的高层接口,这样能够降低用户的使用成本,也对用户屏蔽了很多实现细节。外观模式的定义 要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。外观模式的使用场景为一个复杂子系统提供一个简单接口。当你需要构建一个层次结构的子系统时,使用Facade模式定义了原创 2017-06-21 16:09:43 · 567 阅读 · 0 评论 -
23种设计模式之桥接模式
桥接模式也称为桥梁模式,是结构型设计模式之一。现实生活中桥梁大家肯定知道,是连接河岸两侧的重要枢纽,至于桥接模式跟它很类似。桥接模式的定义 将抽象部分与实现部分分离,使它们都可以独立地进行变化。桥接模式的使用场景 1.如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的联系。 2.设计要求实现化角色的任何改变不应当影响客户端,或者说实现化角色的改原创 2017-06-22 17:45:53 · 760 阅读 · 0 评论 -
MVC的介绍与实战
MVC的基本简介MVC全称是Model - View - Controller,是模型(model)-视图(view)-控制器(controller)的缩写。MVC是一种框架模式而非设计模式,GOF把MVC看作是3种设计模式:观察者模式、策略模式与组合模式的合体,而核心是观察者模式。简而言之,框架是大智慧,用来对软件设计进行分工;设计模式是小技巧,对具体问题提出解决方案,以提高代码复用率,降低耦合度原创 2017-06-22 18:11:06 · 428 阅读 · 0 评论 -
23种设计模式之中介者模式
中介者模式也称为调解者模式或者调停者模式,日常生活中很多调停者角色,最常见的就是房屋中介。在外地工作的估计对这个深有体会。只要在外面租房子就难免碰见黑中介,大家时刻要小心谨慎,不要贪图小便宜吃大亏。好了,言归正传,咱们说说中介者模式。中介者模式定义 中介者模式包装了一些列对象相互作用的方式,使得这些对象不必相互明显作用。从而使他们可以松散耦合。而且可以独立地改变它们之间的交互。中介者模式的使用场原创 2017-06-12 15:22:13 · 367 阅读 · 0 评论 -
MVP应用架构模式
MVP全称是Model View Presenter ,MVP模式可以分离显示层和逻辑层,他们之间通过接口进行通信,降低耦合。在android中,业务逻辑和数据存取是紧紧耦合的,很多缺乏经验的开发者很可能会将各种各样的业务逻辑塞进某个Activity、Fragment或者自定义View中,这样会使得这些组件的单个类型臃肿不堪。如果不将具体的业务逻辑抽离出来,当UI变化时,你就需要去原来的View中原创 2017-06-26 15:33:43 · 802 阅读 · 0 评论 -
23种设计模式之代理模式
代理模式也称为委托模式,是结构型设计模式中非常重要的模式,也是非常普遍的一个模式,在生活中肯定遇到过老板拖欠工资的情况,这时候,就需要走仲裁。走仲裁需要委托一个律师来代替我们去提请诉讼等事情,这个律师就是我们的代理。在生活中这样的例子很多,咱们言归正传,接着说代理模式。代理模式的定义 为其他对象提供一种代理以控制对这个对象的访问。代理模式的使用场景 当无法或者不想直接访问某个对象或者访问某个对原创 2017-06-13 15:22:24 · 406 阅读 · 0 评论 -
面向对象编程思想的六大原则
面向对象的六大原则1.单一职责原则 单一职责原则英文全称:Single Responsibility Principle 简称SRP 定义:就一个类而言,应该仅有一个引起它变化的原因。简单来说,其实就是一个类只负责一个工作。就和流水线上的员工一样,每个人只负责一个工作。 注意:单一职责的划分界限并不是总是那么清晰,很多时候都是需要靠个人经验来界定的。 2.开闭原则 开闭原则英文全称:Ope原创 2017-05-04 16:21:03 · 2536 阅读 · 0 评论 -
23中设计模式之组合模式
组合模式也称为部分整体模式,结构型设计模式之一,组合模式比较简单,它将一组相似的对象看作一个对象处理,并根据一个树状结构来组合对象,然后提供一个统一的方法去访问相应的对象,以此忽略掉对象与对象集合之间的差别。组合模式的定义 将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。使用场景 表示对象的部分-整体层次结构时 从一个整体中能够独立出部分模块原创 2017-06-14 18:10:27 · 348 阅读 · 0 评论 -
23种设计模式之适配器模式
适配器模式在我们的开发中使用率极高,代码中随处可见。像ListView 、GridView 、RecyclerView等都使用了Adapter。一般优化也会是对它的优化。适配器模式的定义 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。适配器模式的使用场景 1. 系统需要使用现有的类,而此类的接口不符合系统的需求,即接口不兼原创 2017-06-15 16:18:08 · 390 阅读 · 0 评论 -
23种设计模式之模板方法模式
在面向对象开发过程中,通常会遇到这样的一个问题,我们知道一个算法所需的关键步骤,并确定了这些步骤的执行顺序,但是,某些步骤的具体实现是未知的,或者说某些步骤的实现是会随着环境的变化而变化的。模板方法模式的定义 定义一个操作中的算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板方式的使用场景 a. 多个子类有公有的方法,并且逻辑基本相同时。原创 2017-06-07 16:55:32 · 397 阅读 · 0 评论 -
23种设计模式之迭代器模式
迭代器模式又称为游标模式,是行为型设计模式之一。 如果要问Java中使用最多的一种模式,答案不是单例模式,也不是工厂模式,更不是策略模式,而是迭代器模式,先来看一段代码吧: public static void print(Collection coll){ Iterator it = coll.iterator(); while(it.hasNext原创 2017-06-07 09:52:54 · 395 阅读 · 0 评论 -
23种设计模式之装饰模式
装饰模式也称为包装模式,结构型设计模式之一,其使用一种对客户端透明的方式来动态地扩展对象的功能,同时它也是继承关系的一种替代方案之一。装饰模式的定义 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活装饰模式的使用场景 需要透明且动态地扩展类的功能时装饰模式的UML类图角色介绍:抽象构建(Component):定义一个抽象接口,用以给这些对象动态地添加职责。具原创 2017-06-16 13:56:48 · 416 阅读 · 0 评论 -
23种设计模式之单例模式
应用最广的模式—单例模式(Singleton)定义:确保一个类中只有一个实例,而且自行实例化并向整个系统提供这个实例。或者说某种类型的对象有且只有一个。 实现单例模式主要有以下几个关键点:构造函数不对外开放,一般为Private通过一个静态方法或者枚举返回单例类对象确保单例类的对象有且只有一个,尤其是在多线程环境下确保单例类对象在反序列化时不会被重新构建对象。单例的实现方式有多重:饿汉式原创 2017-05-05 16:56:19 · 614 阅读 · 0 评论 -
23种设计模式之解释器模式
解释器模式(Interpreter Paattern)是一种比较少见的行为型模式,其提供了一种解释语言的语法或表达式,该模式定义了一个表达式接口,通过该接口解释一个特定的上下文。在这么多设计模式中,解释器模式在实际运用上相对来说要少很多,因为我们很少会自己去构造一个语言的文法。定义 给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。ps:这里看不懂也没原创 2017-05-31 18:30:45 · 349 阅读 · 0 评论 -
23种设计模式之命令模式
命令模式是行为型设计模式之一。命令模式相对于其他的设计模式来说并没有那么多的条条框框,其实它不是一个很“规矩”的设计模式,就是因为这一点,命令模式相对于其他的设计模式更为灵活多变。命令模式的定义 将一个请求封装成一个对象,从而让用户使用不同的请求把客户端参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式的使用场景 需要抽象出待执行的动作,然后以参数的形式提供出来—类似于过程设计原创 2017-06-02 09:33:10 · 289 阅读 · 0 评论 -
23种设计模式之责任链模式
责任链模式(Iterator Pattern),是行为型设计模式之一,责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。责任链模式的定义 使多个对象都有机会处理请求原创 2017-05-24 18:18:25 · 347 阅读 · 0 评论 -
23种设计模式之状态模式
上一篇讲到策略模式,是用来分离算法,在相同的行为抽象下有不同的具体实现策略。这次要说的就是和策略模式很像的状态模式。状态模式中的行为是由状态来决定的,不同的状态下有不同的行为。状态模式和策略模式的结构几乎完全一样,但是他们的目的,本质却完全不同。状态模式的行为是平行的,不可替换的,策略模式的行为是彼此独立、可相互替换的。用一句话来概括,状态模式把对象的行为包装在不同的状态对象里,每一个状态对象都有一原创 2017-05-23 18:21:56 · 361 阅读 · 0 评论 -
23种设计模式之策略模式
策略模式的定义: 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们还可以相互替换,策略模式让算法独立于使用它的客户端而独立变化。 策略模式的使用场景:针对同一类型问题的多种处理方式,仅仅是具体行为有差别时需要安全地封装多种同一类型的操作时出现同一抽象类有多个子类,而又需要使用if-else或者 switch-case 来选择具体子类时类图: Context:用来操作策略的上原创 2017-05-19 12:11:57 · 349 阅读 · 0 评论 -
23种设计模式之抽象工厂模式
定义:为创建一组相关或者是相互依赖的对象提供接口,而不需要指定它们的具体类 使用场景:一个对象族有相同的约束时可以使用抽象工厂模式。 类图: 抽象工厂模式与工厂方法模式的区别: 抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象。他与工厂方法模式的区别就在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则是针对的多个产品等级结构。在编程中,通常一个产品结构原创 2017-05-16 17:07:51 · 266 阅读 · 0 评论 -
23种设计模式之工厂方法模式
定义: 定义一个用于创建对象的接口,让子类决定实例化那个类 使用场景: 在任何需要生成复杂对象的地方,都可以使用工厂方法模式,复杂对象适合使用工厂模式,用new就可以完成创建的对象无需使用工厂模式。/** * Created by jmfstart on 2017/5/12. * 抽象产品类 */public abstract class Product { //产品类的抽象方原创 2017-05-13 15:29:24 · 301 阅读 · 0 评论 -
23种设计模式之原型模式
定义:用原型实例指定创建对象的种类,并通过拷贝这些原型创新的对象 类图: Client:客户端用户Prototype:抽象类或者接口,声明具备clone能力ConcretePrototype:具体的原型类使用场景:类初始化需要消化非常多的资源,这个资源包括数据,硬件资源等,通过原型拷贝避免这些消耗。通过new产生一个对象需要非常繁琐的数据准备或访问权限一个对象需要提供给其他对象原创 2017-05-12 11:02:52 · 323 阅读 · 0 评论 -
23种设计模式之观察者模式
观察者模式是一个使用率非常高的模式,它最常用的地方是GUI系统、订阅—发布系统。因为这个模式的一个重要作用就是解耦,将被观察者和观察者解耦,使得他们之间的依赖性更小,甚至做到毫无依赖。观察者模式的定义 定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所以依赖于它的对象都会得到通知并被自动更新。观察者模式的使用场景关联行为场景,需要注意的是,关联行为是可拆分的,而不是“组合”关系事原创 2017-06-02 16:05:14 · 299 阅读 · 0 评论 -
23种设计模式之Builder模式
Builder定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 Builder使用场景:相同的方法,不同的执行顺序,产生不同的事件结果时多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时产品类非常复杂,或者产品类中的调用顺序不同产生了不同的作用,这个时候使用建造者模式非常合适当初始化一个对象特别复杂,如参数多,且很多参数都具备默认值时 B原创 2017-05-08 18:12:06 · 1085 阅读 · 0 评论