谁能介绍几个JAVA平台开发中使用时间最长的设计模式~最好是通俗易懂,有实例的~500分奖励。

例子很不一样,但是很好理解。

工厂模式、工厂方法模式、单例模式、门面模式、观察者模式和桥模式都是常用的。不同的项目有不同的设计方向,可以参考的设计模式也不尽相同。没有固定的数量,但是以上模式用的比较多。

我又找了其他模式,都列出来了。

======================

Java的常见设计模式

创新模式

1,工厂—追完MM请吃饭。麦当劳和肯德基的鸡翅都是MM们的最爱。虽然口味不一样,但是不管你带MM去麦当劳还是肯德基,只要对服务员说“四个鸡翅”就可以了。麦当劳和肯德基是生产鸡翅的工厂。

工厂模式:客户类和工厂类是分开的。消费者任何时候需要一个产品,问工厂就行了。消费者可以接受不加修改的新产品。缺点是修改产品时,工厂类也要相应修改。比如:如何创建,如何提供给客户端。

2.建设者-MM最喜欢听到“我爱你”这句话。在异地遇到MM,应该可以用他们的方言跟她说这句话。哦,我有一个多语言翻译器,每种语言都有一个按钮。遇到MM,只需要按下相应的按钮,它就能用相应的语言说“我爱你”,外国MM也能轻松搞定。这是我的。这肯定比美军在伊拉克用的翻译机强。

构造模式:将产品的内部表示从产品的生成过程中分离出来,使得一个构造过程可以生成具有不同内部表示的产品对象。构造模式使产品的内部外观能够自主变化,客户不需要知道产品内部构成的细节。构建模式可以强制一步一步的构建过程。

3.工厂法——邀请MM去麦当劳吃汉堡。不同的mm口味不同,要记住每个人很烦。我一般采用工厂法模式,带MM去找服务员说“我要一个汉堡”。让MM直接告诉服务员她想要什么样的汉堡。

工厂方法模式:核心工厂类不再负责所有产品的创建,而是将具体的创建工作交给子类,成为一个抽象的工厂角色,只负责给出具体工厂类必须实现的接口,而不触及具体应该实例化哪个产品类的细节。

4.原型——在QQ上和MM聊天的时候,一定要说一些深情的话。我收集了很多恶心的情话,有需要的时候就抄出来放到QQ里。这是我的原型。(100元每个,要不要?)

原始模型模式:通过给定一个原型对象来指明要创建的对象的类型,然后通过复制这个原型对象来创建更多同类型的对象。原始模型模式允许动态增加或减少产品类别。产品类别不需要有任何预先确定的层次结构,原始模型模式适用于任何层次结构。缺点是每个类都必须配备一个克隆方法。

5.单身——我有六个漂亮的妻子。她们的老公都是我。我是我们的丈夫西格顿。只要说“老公”,都是指同一个人,那就是我(我刚做了个梦,怎么会有这种好事)。

Singleton模式:singleton模式保证一个类只有一个实例,并且自己实例化它,把这个实例singleton模式提供给整个系统。只有当存在真正的“单一实例”需求时,才应该使用单例模式。

结构模型

6.ADAPTER——在朋友聚会上认识了一位来自香港的美女Sarah,但是我不会说粤语,她也不会说普通话,所以我只好求助于我的朋友kent。作为我和莎拉之间的适配器,我和莎拉可以互相对话(不知道他会不会忽悠我)。

适配器(transformer)模式:将一个类的接口转换成客户端期望的另一个接口,这样两个因为接口不匹配而无法协同工作的类就可以协同工作。适配类可以根据参数向客户端返回合适的实例。

7.桥——如果早上遇到MM,要说早安;如果晚上遇到MM,要说晚上好;遇到穿新衣服的MM,要说衣服好看。遇到MM的新发型,要说头发好看。不要问我“今天早上遇到换了新发型的MM你说什么?”把它和桥牌结合起来就好了。

桥接模式:将抽象和实现解耦,使它们能够独立变化,即把它们之间的强相关性变成弱相关性,即在一个软件系统的抽象和实现之间用组合/聚合关系代替继承关系,使它们能够独立变化。

今天是玛丽的生日。"你应该送我一份生日礼物。"“嗯,好吧,你自己去店里选吧。”“这t恤好看,买吧,这裙子好看,买吧,这包也不错,买吧。”“嘿,我买了三件。我只答应送一件礼物。”“什么?t恤、裙子和包包是完美的搭配。小姐,请包起来。”"...",MM可以用复合模式,你学会了吗?

组合模式(Composition mode):组合模式将对象组织成树形结构,可以用来描述整体与部分之间的关系。复合模式是处理对象的树形结构的模式。综合模型以树形结构显示部分与整体的关系。组合模式使客户端能够将单个组件对象视为由它们组成的复合对象。

9.DECORATOR—Mary的生日轮到Sarly了,不要让她自己选,不然这个月伙食费肯定过不去。把我去年在华山顶上拍的照片拿出来,在背面写上“最好的礼物是有爱的Fita”,然后去街边的礼品店买个相框(卖礼物的MM也很漂亮),再找隔壁搞美术设计的Mike设计一个漂亮的盒子放进去...

装饰模式(Decorator pattern ):装饰模式以对客户端透明的方式扩展了对象的功能,这是继承关系的一种替代方式,比继承提供了更多的灵活性。动态地向一个对象添加函数,并且这些函数可以被动态地撤销。加上一些基本功能的排列组合所产生的非常大量的功能。

10,门面——我有一台专业的尼康相机,喜欢自己手动调节光圈和快门,这样拍出来的照片才专业,但是MM不懂这些东西,甚至教了很久。好在相机有立面设计模式。把相机调到自动模式,对准目标按快门就行了。一切都是相机自动调节,让MM用这个相机给我拍一张。

门面模式:与子系统的外部通信必须通过统一的门面对象进行。facade模式提供了一个高级接口,使得子系统更易于使用。每个子系统只有一个facade类,并且这个facade类只有一个实例,也就是说,它是一个singleton模式。但是整个系统可以有多个facade类。

11,FLYWEIGHT——每天给MM发短信,手指都快累死了。最近买了新手机,可以在手机里存一些常用的句子。想用的时候可以直接拿出来,在前面加上MM的名字就发了,不用一个字一个字的打。* * *享受的句子是Flyweight,MM的名字是提取的外部特征,根据上下文使用。

享受模式:轻量级是指拳击中最轻的量级。元共享模式以* * *共享方式高效支持大量细粒度对象。元享受模式中* * *享受的关键是区分内在状态和外在状态。内在状态储存在享受元素中,不会随着环境的变化而不同。外在状态随着环境的变化而变化。外在状态不能影响内在状态,它们是相互独立的。把* * *能享受的状态和* * *不能享受的状态从常规类中区分出来,把* * *不能享受的状态从类中排除。客户端不能直接创建* * * *享受的对象,应该使用一个工厂对象来创建* * * *享受的对象。享受元模式大大减少了内存中的对象数量。

12,代理——在网上和MM聊天总是以“你好,你好”和“你是哪里人”开头“你多大了?”“有多高?”这些话真的很讨厌。写一个程序作为我的代理。当你收到这些话的时候,你可以设置一个自动回答,当你收到其他话的时候通知我。怎么样?酷毙了。

代理模式:代理模式为一个对象提供一个代理对象,代理对象控制对源对象的引用。代理是指一个人或一个组织代表另一个人或另一个组织行事。在某些情况下,客户端不想或者不能直接引用一个对象,代理对象可以直接充当客户端和目标对象之间的中介。客户端无法区分代理主题对象和真实主题对象。代理模式可能不知道真实的代理对象,而只持有代理对象的一个接口。此时,代理对象不能创建代理对象,代理对象必须由系统中的其他角色创建并传入。

行为模式

13,责任链--晚上去上英语课,为了脱身坐在最后一排。哇,前面坐着好几个漂亮的MM。找张纸条,写上“嗨,你能做我女朋友吗?如果不愿意,请转发”,笔记会一一传下去。哦,不对,第一排的MM把纸条递给了老师。听说是个老处女。快跑!

责任链模式:在责任链模式中,许多对象通过每个对象对其下一个主目录的引用来连接。

站起来形成一条链。请求沿着这个链传递,直到链中的一个对象决定处理该请求。客户端不知道链中的哪个对象将最终处理这个请求,系统可以动态地重组链并分配责任,而不会影响客户端。处理者有两个选择:承担责任或者传给下一个家庭。一个请求可能最终不被任何接收者对象接受。

14,COMMAND————我有一个MM,家里管的很严,不能见面,要在哥哥的帮助下在我们之间发消息。如果她有什么指示给我,她会写个便条让她哥哥带给我。不,她哥哥发了另一个命令。为了感谢他,我请他吃了一碗杂酱面。我不知道他说:“我同时给我姐的三个男朋友发了命令,所以你在请我吃面之前,先算算你的火气。”,:-(

命令模式:命令模式将请求或操作封装到一个对象中。命令模式将发出命令的责任与执行命令的责任分开,并将它们委托给不同的对象。命令模式允许请求方和发送方独立,这样请求方就不需要知道接收方的接口,更不用说请求是怎么收到的,操作是否执行,何时执行,如何执行。系统支持命令撤销。

15,讲解员——我有泡MM的真经,里面有泡MM的各种攻略,比如吃西餐的步骤,去看电影的方法。和MM约会的时候,做个翻译,照着上面的剧本来就行了。

解释器模式:给定一种语言,解释器模式可以定义其语法的表示,同时提供一个解释器。客户可以使用这个解释器来解释这种语言的句子。解释器模式将描述在拥有简单的语法之后,如何使用模式设计来解释这些语句。解释器模式中提到的语言是指任何解释器对象都可以解释的任何组合。在解释器模式下,需要定义一个表示语法的命令类的层次结构,即一系列组合规则。每个命令对象都有一个解释方法,表示对命令对象的解释。命令对象层次结构中对象的任何排列组合都是一种语言。

16,迭代器——我爱上了玛丽,不顾一切向她求婚。

玛丽:“如果你想让我嫁给你,你必须同意我的条件。”

我:“我什么都答应,你说就是了。”

玛丽:“我迷恋上了那颗一克拉的钻石。”

我:“我买,我买,还要什么?”

玛丽:“我看上了湖边的别墅。”

我:“我买,我买,还要什么?”

玛丽:“你的阴茎一定有50厘米长。”

我的头嗡嗡作响,我坐在椅子上,咬紧牙关:“我切,我切,还有吗?”

……

迭代子模式:迭代子模式可以顺序访问聚合中的元素,而不会暴露聚合的内部外观。多个对象形成的集合称为聚合,聚合对象是可以包含一组对象的容器对象。迭代子模式将迭代逻辑封装到一个独立的子对象中,它与聚合本身是分离的。迭代子模式简化了聚合的接口。每个聚合对象可以有一个或多个迭代子对象,每个迭代的迭代状态可以相互独立。迭代算法可以独立于聚合角色改变。

17,调解员————四个mm打麻将,分不清谁该给谁多少钱。还好当时我在,按照他们的筹码数钱,赚钱的从我这拿走,赔钱的赔我,一切都还行。我有四部MM手机。

中介模式(Mediator mode):中介模式封装了一系列对象交互的方式,这样这些对象就不必明显地相互交互。以便它们可以松散耦合。当一些对象之间的交互发生变化时,不会立即影响其他对象之间的交互。确保这些效果可以相互独立地改变。中介模型将多对多交互转化为一对多交互。中介器模型抽象了对象的行为和协作,在小规模行为中单独处理对象和其他对象之间的交互。

18,MEMENTO——同时和几个MM聊天的时候,一定要记得清楚你刚刚对MM说了什么,不然MM发现了会不高兴的。还好我有备忘录,把刚才对哪个MM说的话都抄下来放在备忘录里存储,方便随时查看之前的记录。

Memento模式:memo对象是用于存储另一个对象内部状态快照的对象。Memento模式的目的是在不破坏封装的情况下捕获对象的状态,将其外部化并存储,以便该对象可以在未来的适当时间恢复到存储的状态。

19,观察者————想了解我公司最新MM信息?加入公司的MM信息邮箱群就可以了。汤姆负责收集信息。他发现的新信息发布到邮件群里,不需要一个一个通知我们,这样我们作为订阅者(观察者)就能及时收到信息。

观察者模式:观察者模式定义了多依赖关系,允许多个观察者对象同时监控一个主题对象。当这个主题对象的状态改变时,所有的观察者对象都会得到通知,这样它们就可以自动更新自己。

20.状态——和MM交往,一定要注意她的状态。她的行为在不同的州会有所不同。比如你今晚请她看电影,对你不感兴趣的MM会说“有事”,而不讨厌你但还没喜欢过你的MM会说“好吧,但你能带上我同事吗?”,已经喜欢上你的MM会说“什么时候?看完电影去酒吧怎么样?”当然,如果你在看电影的过程中做得好,也可以让MM的状态从不喜欢变成喜欢。

状态模式:状态模式允许对象在其内部状态改变时改变其行为。这个对象看起来好像已经改变了它的类。状态模式将被研究对象的行为包装在不同的状态对象中,每个状态对象都属于一个抽象状态类的子类。状态模式的目的是当对象的内部状态改变时,使对象的行为改变。state模式需要为系统的每个可能状态创建state类的子类。当系统状态改变时,系统会改变所选的子类。

21,策略————和不同类型的MM约会需要不同的策略。有的请电影,有的吃零食,有的去海边浪漫。单一的目的就是为了讨MM欢心。我的MM追包里有很多攻略。

策略模式(Policy pattern):策略模式是针对一组算法的,每个算法都封装成一个独立的类,具有相同的接口,使得它们可以互相替换。策略模式使算法能够在不影响客户端的情况下进行更改。战略模型将行为与环境分开。环境类负责维护和查询行为类,具体策略类提供各种算法。因为算法和环境是独立的,所以算法的增减和修改不会影响环境和客户端。

22.模板法——你看过经典文章《如何劝女生上床》吗?女生上床不变的步骤分为八个模板法:萍水相逢、打破僵局、追求、接吻、前戏、动手、爱抚、进去,但每个步骤根据不同情况有不同的方法,看你的即兴发挥(具体实现);

模板方法模式:模板方法模式准备一个抽象类,以具体方法和具体构造函数的形式实现一些逻辑,然后声明一些抽象方法强制子类实现其余逻辑。不同的子类可以用不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。先做一个顶层的逻辑框架,逻辑的细节留给具体的子类去实现。

23.VISITOR—情人节到了,我想给每个MM送一束花,一张卡片,但是每个MM送的花要根据她个人的特点,每张卡片要根据她的个人特点来选择。我怎样才能自己发现?我最好请花店老板和礼品店老板做个拜访,这样花店老板可以根据MM的特点选一束花,礼品店老板也可以根据每个人的特点选一张卡片,这样会容易很多。

访问者模式:访问者模式的目的是封装一些强加在一些数据结构元素上的操作。一旦这些操作需要修改,接受这个操作的数据结构可以保持不变。访问者模式适用于数据结构相对不确定的系统,将数据结构与作用于该结构的操作解耦,使操作集可以相对自由地进化。访问者模式很容易添加一个新的操作,就是添加一个新的访问者类。visitor模式将相关的行为集中在一个visitor对象中,而不是分散到单独的节点类中。当使用visitor模式时,应该将尽可能多的对象浏览逻辑放在visitor类中,而不是放在它的子类中。访问者模式可以跨几个类层次结构访问属于不同层次结构的成员类。