预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共16页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

java24种设计模式设计模式的七大原则开闭原则:对扩展开放、对修改关闭。单一指责原则:一个类只做一件事。依赖倒转原则:类似于ioc,采用接口编程。迪米特原则:高内聚,低耦合。接口隔离原则:应该使用多个接口,而不是用单一的总接口。合成复用原则:尽量使用对象组合,而不是继承来达到复用目的。里氏替换原则:子类可以扩展父类的功能,但不能改变原有的功能。一、创建型模式(5种)2、命令模式(Command)将命令包装在对象中,以便可以存储、传递到方法中,并像任何其他对象一样返回(以命令动作为类名)命令模式可以把发出命令的责任和执行命令的责任分开。适合场景:需要通过操作来参数化对象。想要将操作放入队列中,本地执行操作或远程执行操作时,可以使用。想要实现操作回滚功能时。用例:java.lang.Runnablejavax.swing.Action3、迭代器模式(Iterator)让你能在不暴露集合底层表现形式(列表、栈和树等)的情况下遍历集合中所有的元素。提供一个统一的方式来访问集合中的对象。适合场景:当集合背后时复杂的数据结构,希望对客户端隐藏时(处于便利性或安全性)可以监视程序中重复的遍历代码时希望遍历不同,甚至是无法预知的数据结构时。用例:IteratorVector集合set集合4、中介模式(Mediator)能让你减少对象之间混乱无序的依赖关系。该模式会限制对象之间的直接交互,迫使它们通过一个中介者对象进行合作。(用一个中介对象来封装一系列关于对象交互行为)即使用一个4*间对象来进行消息分发以及减少类之间的直接依赖适合场景:当一些对象或其他对象紧密耦合难以对其进行修改时。当组件过于依赖其他组件而无法在不同应用中复用时。如果为了能在不同情景下复用一些基本行为,而导致需要被迫创建大量组件子类时。用例:mq使用的就是此模式MVC中的ControllerExecutor5、备忘录模式(Memento)允许在不暴露对象实现细节的情况下保存和恢复对象之前的状态。即生成对象状态的一个快照,以便对象可以恢复原始状态而不用暴露自身的内容。在不破坏封装性的情况下,捕获并保存一个类的内部状态,可以利用该保存的状态实施恢复操作。适合场景:当你需要创建对象状态快照来恢复其之前的状态当直接访问对象的成员变量、get、set时导致封装被突破时用例:Date对象通过自身内部的一个long值来实现备忘录模式Serializable6、观察者模式/发布订阅模式(Observer/Listener)允许你定义一种订阅机制,可在对象事件发生时通知多个“观察”该对象的其他对象。适合场景:当一个对象的改变需要改变其他对象时,或实际对象时事先未知的或动态变化的时。当应用中的一些对象必须观察其他对象时。用例:EventListenertomcat的LifeCycleListener使用zookeeper作为观察者,例如分布式锁、服务发现等7、状态模式(State)能在一个对象的内部状态变化时改变其行为,使其看上去就像改变了自身所属的类一样。即允许您在运行时根据内部状态轻松更改对象的行为。状态模式重点在各状态之间的切换从而做不同的事情,状态模式不同状态下做的事情不同。状态模式封装了对象的状态,因为状态是跟对象密切相关的,它不能被重用适合场景:如果对象需要根据自身当前状态进行不同行为,同时状态的数量非常多且与状态相关的代码会频繁变更时。如果某个类根据成员变量的当前值改变自身行为,从而需要使用大量的条件语句时。当相似状态和基于状态转换中存在许多重复代码时8、策略模式(Strategy)它能让你定义一系列算法,并将每种算法分别放入独立的类中,以使算法的对象能够相互替换即将一组算法封装成一系列对象。通过调用这些对象可以灵活的改变程序的功能策略模式更侧重于根据具体情况选择策略,并不涉及切换。策略模式做的都是同一件事。策略模式封装算法或策略,通过从Context中分离出策略或算法,我们可以重用它们。适合场景:想使用对象中各种不同的算法变体,并希望在运行时切换算法时。如果算法在上下文的逻辑中不是特别重要,使用该模式能将类的业务逻辑与算法实现细节隔离开来。当类中使用了复杂条件运算符如:ifelse,以在同一算法的不同变体中切换时。可以用策略模式和工厂模式优化程序中过多的if-else9、模版模式(template)在超类中定义了一个算法的框架,允许子类在不修改结构的情况下重写算法的特定步骤。即让子类可以重写方法的一部分,而不是整个重写,你可以控制子类需要重写那些操作.适合场景:只希望客户端扩展某个特定的算法步骤,而不是整个算法或其结构时。当多个类的算法除了一些细微不同之外几乎完全一样时。用例:InputStream类的skip或read方法我们可以做一个抽象类,某个方法需要子类来实现差异化10、