java设计模式
dx我是大雄
喜欢吃青椒的孩子。。。。。
展开
-
状态模式
一.状态模式介绍状态模式的行为是平行的,不可替换的策略模式的行为是彼此独立,可相互替换用一句话来表述,状态模式把对象的行为(上下频道,音量)包装在不同的状态对象(包含这些行为的TVState)里,每一个状态对象都有一个共同的抽象状态基类(状态开,状态关的共同基类TVState)。状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变。powerOn,powerOff原创 2016-04-04 16:32:45 · 1388 阅读 · 0 评论 -
Builder设计模式
一.用途1.为了把构建过程跟表示形式分离出来(说白了,动物生孩子,龙生龙凤生凤,老鼠的儿子XXX,过程都一样,但是最后生出来的不一样),所以可以把这个过程抽出去,因为大家都一样嘛二.使用场景1、当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。2、当构造过程必须允许被构造的对象有不同表示时。三.举个栗子(1)女娲造人的例子,显示早了原创 2016-09-17 21:12:06 · 435 阅读 · 0 评论 -
享元模式
一.基本介绍享元模式(FlyWeight)是对象池的一种体现,享元模式用来尽可能减少内存使用量,它适合用于可能存在大量重复对象的场景,来缓存可共享的对象,达到对象共享,避免创建过多对象的效果,这样一来就可以提升性能,避免内存溢出等 二.使用场景1.系统中存在大量的相似对象2.细粒度的对象都具备较接近的外部状态,而且内部状态与环境无关(对象没有特定身份,也就是大家都一样)。原创 2016-06-05 20:32:16 · 513 阅读 · 0 评论 -
责任链模式
一.责任链模式的定义使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。 二.责任链模式的使用场景多个对象可以处理同一请求,但具体由哪个对象处理则在运行时动态决定在请求者不明确的情况下向对个对象中的一个提交一个请求。需要动态指定一组对象处理请求。 三.责任链模式UML简单模原创 2016-04-12 23:02:52 · 364 阅读 · 0 评论 -
外观模式(注意区别于中介者模式)
一.外观模式(有点像中介者模式)通过一个外观类使得整个系统的接口只有一个统一的高层接口,这样就能降低用户的使用成本,也就对用户屏蔽了很多实现细节,当然在我们的开发过程中,外观模式也是我们封装API的常用手段 二.外观模式定义要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行,门面模式(Facade模式)提供一个高层次的接口,使得子系统更易于使用(就是一个大系统里面有很多小原创 2016-06-05 21:24:07 · 4736 阅读 · 0 评论 -
Android EventBus的基本使用
怕自己以后忘了怎么用。。。一.背景(直接从github直接抄过来)github地址:https://github.com/greenrobot/EventBusEventBus is a publish/subscribe event bus optimized for Android.EventBus...simplifies the communic原创 2016-04-04 13:23:54 · 430 阅读 · 0 评论 -
中介者模式(Mediator)
一.中介者模式介绍中介者模式(Mediator Pattern)也称为调节者模式或者调停者模式,Mediator本身就有调停者和调节者的意思。 二.中介者模式的定义1.中介模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显作用,从而使他们可以松散耦合.2.当某些对象之间的作用发生改变时,不会立即影响其他的一些对象之间的作用,保证这些作用可以彼此独立。3.中介原创 2016-05-20 15:21:49 · 830 阅读 · 0 评论 -
模板方法模式
一.模板方法模式介绍在面向对象开发过程中,通常会遇到这样一个问题,我们知道一个算法所需的关键步骤,并确定了这些步骤的执行顺序,但是,某些步骤的具体实现是位置,或者说是这些步骤的实现是会随着环境的变化而改变的,例如,执行程序的流程大致如下。(1).检查代码的正确性(2)链接相关的类库(3)编译相关代码(4)执行程序 二.模板方法模式的定义定义一个操作中的算法的框原创 2016-05-20 14:40:26 · 348 阅读 · 0 评论 -
迭代器模式(实际运用比较少)
一.迭代器模式介绍迭代器模式(Iterator Pattern)又称为游标(Cursor)模式,是行为型设计模式之一。源于对容器的访问,比如java中的list,Map,数组等,我们知道对容器对象的访问必然是多种多样的,所以我们把遍历的方法封装在容器中,或者不提供遍历方法。 1.如果我们将遍历的方法封装到容器中,那么对于容器类来说就承担了过多的功能,容器类不仅要维护自身内部的数据元原创 2016-05-20 14:29:59 · 4563 阅读 · 0 评论 -
MVP模式
一.使用背景1.逻辑业务被塞到View中(Activity),使得View变的混乱2.MVP可以分离显示层和逻辑层,他们之间通过接口进行通信,降低耦合3.数据层(可能是本地数据库检索数据,远程服务器,或者被替换)4.UI层(随着产品迭代,肯定会重新设计),如果View中混合着逻辑,那么UI变化导致我们修改新的View控件,就要到原来的View中抽离具原创 2016-06-01 22:07:21 · 930 阅读 · 0 评论 -
装饰者模式(附与代理模式的区别,乍看挺像)
一.装饰模式介绍装饰模式也称为包装模式,结构设计模式之一,就像房子一个,房子盖好都是毛坯房,但是装修之后,有简单装修,精装修,豪华装修,各有不同,这个就可以理解为装饰模式,不管你怎么装修,最开始都是毛坯房,或者一个人每天穿不同的衣服(装饰),但是本质还是同一个人没有发生改变。 二.装饰模式的定义动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类而言更加简单原创 2016-05-31 22:49:10 · 3603 阅读 · 1 评论 -
代理模式
一.介绍对于程序员来说最常接触的代理模式就是代理上网,让别人买饭也是代理,如果你碰到辞职老板不给你发工资,那么要请个律师打官司,这也是代理 二.代理模式的定义为其他对象提供一种代理以控制对这个对象的访问。(也就是在对象A中的方法a中调用对象B的方法a) 三.代理模式的使用场景当无法或不想直接访问某个对象或访问某个对象存在苦难时可以通过一个代理对象来间接访问,原创 2016-05-30 22:05:09 · 3918 阅读 · 0 评论 -
观察者模式(这个用的太多了)
一.观察者模式的定义定义对象间一种一对多的依赖关系,是的没当一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。二.观察者模式的使用场景(1).关联行为场景,需要注意的是,关联行为是可拆分的,而不是“组合”关系(2).事件多级触发场景(3).跨系统的消息交换场景,如消息队列,事件总线的处理机制。三.观察者模式的UML类图角色介绍:subject:抽象主题(原创 2016-04-04 10:21:51 · 3112 阅读 · 0 评论 -
原型设计模型(深拷贝浅拷贝)
一.使用背景(1)类初始化需要消化非常多的资源,这个资源包括数据,硬件资源,通过原型拷贝可以避免这些消耗。(2)通过new产生一个对象需要非常繁琐的数据准备或访问权限,这时可以使用原型模式(3)一个对象需要提供给其他对象访问,而且各个调用者可能都需要修改其值时,可以考虑使用原型模式拷贝多个对象供调用者使用,即保护性拷贝。(避免别人改变对象的值,但是可以使用它的值)注意:.通过c原创 2016-03-23 23:01:58 · 671 阅读 · 0 评论 -
策略模式
一.介绍与背景实现某一个功能可以有多种算法或者策略,我们根据实际情况选择不同的算法或者策略来完成该功能。例如,排序算法,可以使用插入排序,归并排序,冒泡排序等。如果将这些算法或者策略抽象出来,提供一个统一的接口,不同的算法或者策略有不同的实现类,这样在程序客户端就可以通过注入不同的实现对象来实现算法或者策略的动态替换,这种模式的可扩展性,可维护性也就更高,也就是我们本章要说的策略模式。原创 2016-03-23 22:50:36 · 427 阅读 · 0 评论 -
面向对象的六大基本原则
一.单一职责原则(Single Responsibility Principle)缩写SRP就一个类而言,应该仅有一个引起它的变化原因(换句话说,也就是一个类最好制作一件事(这个一件事的定义比较难定义,看个人)) 例子:imageLoader 最开始的imageLoader里面有 图片加载逻辑 和 处理图片缓存的逻辑 ,这在我们看来就不符合SRP原则,所以要分开,分成图片加载原创 2016-03-06 19:31:52 · 475 阅读 · 0 评论 -
工厂方法模式
一.背景在Android其实很多用到该模式的,以onCreate为例,它就可以看作是一个工厂方法,我们在其中可以构造我们的View并通过setContentView返回给frameWork处理二.具体定义其实就是一个用于创建对象的接口,让子类决定实例化哪个类。三.工厂方法模式的使用public abstract class Product { /**原创 2016-04-04 17:19:43 · 393 阅读 · 0 评论 -
抽象工厂模式
一.背景抽象工厂意味着生产出来的产品是不确定的,抽象工厂模式起源于以前对不同操作系统的图形化解决方案。 二.抽象工厂模式的定义为创建一组相关或者是相互依赖的对象提供一个接口,而不需要指定它们的具体类 三.抽象工厂模式的使用场景(还是没看懂)例子:Android,ios,Window,Phone下都有短信软件,拨号软件,两者都属于Software软件的范畴,但是他们所在的原创 2016-04-04 16:58:51 · 396 阅读 · 0 评论 -
单例模式的DCL问题
刚刚写完静态代码块问题,突然想到之前单例模式的坑,虽然解决办法知道了,但是之前的原理不太明白,刚刚突然想清楚了。。。就是这么任性1.饿汉式//饿汉式 class Single{ private Single(){} //私有化构造函数。 private static Single s = new Single(); //创建私有并静态的本原创 2016-11-27 16:06:41 · 1471 阅读 · 0 评论