设计模式分析
文章平均质量分 78
心之所善兮
心之所善兮
展开
-
外观模式
应用场景1)为一个复杂子系统提供一个简单接口。屏蔽了复杂系统的实现的细节,对外提高了更简便的操作2)提高子系统的独立性。3)在层次化结构中,可以使用Facade模式定义系统中每一层的入口。 /** * 子系统1 * @author Administrator * */public class SubSystem1 { public void open()原创 2015-07-26 12:29:05 · 421 阅读 · 0 评论 -
命令模式
应用场景:(1)命令模式使新的命令很容易地被加入到系统里。 (2)允许接收请求的一方决定是否要否决请求。 (3)能较容易地设计一个命令队列。 (4)可以容易地实现对请求的撤销和恢复。 (5)在需要的情况下,可以较容易地将命令记入日志。这里以MP3的播放,停止,回放命令来说明/** * 抽象命令,命令的抽象对象 * @aut原创 2015-08-05 11:15:37 · 255 阅读 · 0 评论 -
桥接模式
应用场景:在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式。类似于数学中如果一个函数有多个变量,我们就应该保证在同一时刻只能只有一个变量在变化,当这个变量确定了后,在让另一个变量变化。下面举个例子来说明:不同的人,不原创 2015-08-05 03:47:46 · 538 阅读 · 0 评论 -
备忘录模式
应用场景:用于需要维护或记录历史的类,或者需要保存属性只是众多属性中的一小部分时,可以通过保存的备忘录信息还原到之前的状态。/** * 游戏角色的状态 * @author Administrator * */public class RoleState {//状态时刻标记public String state_Time;//血量public in原创 2015-08-05 02:21:06 · 366 阅读 · 0 评论 -
解释器模式
应用场景: 解释器模式需要解决的是,如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。譬如我们使用的正则表达式/* * 解释器上下文环境类。用来存储解释器的上下文环境,比如需要解释的文法等 * */public class Context {private String in;private原创 2015-08-05 23:15:02 · 356 阅读 · 0 评论 -
职责链模式
应用场景:当客户端提交一个请求时,请求是沿着链传递的,只到有对象能够处理它。请求的发送者和接受者都没有对方的明确信息,可简化对象的相互连接,仅仅需保持一个指向后继者的引用即可。这里以员工加薪的申请过程来说明:/** * 请求 * @author ZhangSheng * */public class Request {public double原创 2015-08-05 22:14:31 · 300 阅读 · 0 评论 -
中介者模式
应用场景:用中介者对象来封装一系列的对象交互,使得这些对象之间不需要显示的引用,从而使其耦合松散, 可以独立的改变她们的交互.网状结构变成了星型结构了。/** * 抽象的同事类 * @author ZhangSheng * */public abstract class AbstractColleague {public double number;原创 2015-08-05 22:22:33 · 290 阅读 · 0 评论 -
享元模式
应用场景:可以避免大量非常相似类的开销,有时需要生成大量细粒度的类实例来表示数据,如果发现这些实例除了几个参数外基本上都是相同的,有时就能够大幅度减少需要实例化的类数量。如果将这些参数移到类实例外面,在方法调用时将他们传递进来,就可以通过共享大幅度减少单个实例数目。/**用户**/public class User {public String userNa原创 2015-08-05 22:41:35 · 343 阅读 · 0 评论 -
命令模式
应用场景:将一个请求封装成一个对象,从而使你很容易的添加命令,命令队列,撤销,记录日志等操作。把请求者和处理者分开了。这里一我们用过的MP3播放器来说明:/** * 命令的接受者 * @author ZhangSheng * */public class Mp3 {public void play(){System.out.println("播放")原创 2015-08-05 22:30:43 · 290 阅读 · 0 评论 -
访问者模式
应用场景:访问者模式结构:访问者角色(Visitor): 为该对象结构中具体元素角色声明一个访问操作接口. 具体访问者角色(Concrete Visitor): 实现每个由访问者角色(Visitor)声明的操作.元素角色(Element): 定义一个Accept操作,它以一个访问者为参数.具体元素角色(Concrete Element): 实现由元素角色提供的Accept操作.原创 2015-08-05 23:57:52 · 316 阅读 · 0 评论 -
迭代器模式
应用场景:迭代器模式提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节。,是与集合共生共死的,一般来说,我们只要实现一个集合,就需要同时提供这个集合的迭代器;但是,由于容器与迭代器的关系太密切了,所以大多数语言在实现容器的时候都给提供了迭代器,我们都知道增强for循环,并且这些语言提供的容器和迭代器在绝大多数情况下就可以满足我们的需要,所以现在需要我们自己去实践迭代器模式的场景原创 2015-08-02 23:58:42 · 315 阅读 · 0 评论 -
组合模式
应用场景:通过实现组合模式,调用者对组合对象的操作与对单一对象的操作具有一致性。调用者不用关心这是组合对象还是文件,也不用关心组合对象内部的具体结构,就可以调用相关方法,实现功能。 这里对windows中的文件和文件夹的操作来说明,我们可以看到我们自己对文件和文件夹都有重名名,复制,粘贴,剪切等功能,我们不会去关心它是文件还是文件夹。直接无脑复制粘贴即可。定义文件或文件夹共原创 2015-08-01 01:13:43 · 306 阅读 · 0 评论 -
原型模式
以孙悟空的72变为例子来说明下 /** * 克隆的原型 * @author Administrator * */public class Monkey implements Cloneable,Serializable{ /** * */ private static final long serialVersionUID = 1L; publ原创 2015-07-21 00:30:04 · 376 阅读 · 0 评论 -
模版方法模式
.应用场景:1) 一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。2) 各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。首先识别现有代码中的不同之处,并且将不同之处分离为新的操作。最后,用一个调用这些新的操作的模板方法来替换这些不同的代码。 /** * 定义模版的抽象类 * @author Administrator * */p原创 2015-07-26 11:54:54 · 379 阅读 · 0 评论 -
策略模式
场景是商城打折促销,正常收费,打8折收费,每满500减少50收费 这里结合简单工厂模式来产生不同的收费策略。而每个收费策略都有一个公共的抽象类 公共的抽象类:/** * 收费抽象类 * @author Administrator * */public abstract class CashSuper { //抽象的收费方法 public a原创 2015-07-12 17:14:50 · 396 阅读 · 0 评论 -
抽象工厂模式
应用场景: 1.一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节,这对于所有形态的工厂模式都是重要的。 2.这个系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。 3.同属于同一个产品族的产品是在一起使用的,这一约束必须在系统的设计中体现出来。(比如:Intel主板必须使用Intel CPU、Intel芯片组) com.android.abstract_原创 2015-07-26 16:53:43 · 352 阅读 · 0 评论 -
建造者模式
应用场景: 相同的建造过程,不同的表现结果。根据传入的不同建造对象,返回不同的建造对象。这里的例子是建造一辆奔驰和宝马。两者的建造过程是完全相同的,但是最后的表现是不同的/** * 建造的车 * @author Administrator * */public class Car { public String name; public String原创 2015-07-26 13:31:04 · 450 阅读 · 0 评论 -
装饰模式
1. 装饰模式(Decorator)的定义:又名包装(Wrapper)模式,装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。2. 装饰模式以对客户端透明的方式动态的给一个对象附加上更多的责任。换言之客户端并不会觉的对象在装饰前和装饰后有什么区别。3. 装饰模式可以在不创造更多的子类的模式下,将对象的功能加以扩展。4. 装饰模式与类继承的区别原创 2015-07-13 22:04:49 · 424 阅读 · 0 评论 -
代理模式
用在水浒传中潘金莲通过王婆这个代理者来勾引西门庆来达到自己的目的为例子来说明真实对象通过代理模式中的代理者来控制其他对象达到自己的目的,但是其他对象对真实对象是不可见的,好像就看不到真实对象,真实对象不存在一样。------------------------------------------------------------------------------------------原创 2015-07-15 00:20:54 · 390 阅读 · 0 评论 -
简单观察者模式
应用场景:当一个对象的改变需要同时改变其他对象的时候 /** * 被观察者的对象 * @author ZhangSheng * */public class Person_Observable extends Observable { private String name,sex; private int age; public Person_Obs原创 2015-07-28 23:09:41 · 294 阅读 · 0 评论 -
适配器模式
应用场景:适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。适配器模式的用意是要改变源的接口,以便于目标接口相容。缺省适配的用意稍有不同,它是为了方便建立一个不平庸的适配器类而提供的一种平庸实现。 在任何时候,如果不准备实现一个接口的所有方法时,就可以使用“缺省适配模式”制造一个抽象类,给出所有方法的原创 2015-07-29 20:34:13 · 264 阅读 · 0 评论 -
状态模式
依据不同的状态,有着不同的行为。状态之间来回切换,如果新增状态,只需要新增新的状态的类就可以了。将不同状态的判断逻辑放在了各个状态类中了。这里以过马路的红绿灯状态为例子来说明下。 /** * 定义状态的接口,包含状态的抽象方法 * @author Administrator * */public interface State { // 下个状态 pu原创 2015-07-20 22:52:22 · 371 阅读 · 0 评论 -
简单工厂模式
java和android中对简单工厂模式使用的分析。原创 2015-04-23 22:57:50 · 424 阅读 · 0 评论