码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式初探

时间:2016-07-19 23:35:58      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:

1.适配器模式

 
    类适配器
    对象适配器
    默认适配器模式 
 
2.桥梁模式
 
    将抽象化与实现脱耦,使得二者可以独立的变化
 
    桥接:为被分离了的抽象部分和实现部分来搭桥
    
    如何桥接:桥接在程序上就体现成了在抽象部分拥有实现部分的接口对象
    
    谁来桥接的问题:
        就是谁来负责创建抽象部分和实现部分的关系
    
 
3.组合模式 Composite
    
    将对象组合成树形解雇以表示"整体-部分"的层次结构
 
4.享元模式 FlyWeight
    
    采用一个共享来避免大量拥有相同内容对象的开销
 
 
5.责任链模式
    当客户提交一个请求时,从第一个对象开始,链中收到请求的对象要么亲自处理它,要么转发给链中的下一个候选者。
 
 
6.模板模式
    定义了一个操作中的算法骨架,将一些步骤延迟到子类中。
    基本方法:基本方法也称为基本操作,是由子类实现的方法,并且再模板方法中调用
    模板方法:一般是一个具体的方法,也就是一个骨架,实现对基本方法的调度完成固定的逻辑
    钩子方法:由抽象类申明并加以实现
 
 
7.命令模式:从界面设计中提取出来的一种分离耦合,提高重用的方法,被认为是最
优雅最简单的模式
 
命令模式的接收者:接受者可以是任意的类,对它没有什么特殊要求,这个对象知
道如何真正执行命令的操作,执行时是从command的实现类里面调转过来
智能命令:代替接收者实现命令要求的功能
发起请求的对象和真正实现的对象是解耦的
Receiver
Command
Invoker
Client
 
8.状态模式
    允许一个对象在其内部状态改变的时候改变其行为。状态模式的功能就是分离状态的行为,通过维护状态的变化,来调用不同状态对应的不同功能。也就是说:状态和行为是相关联的,它们的关系可以描述为:状态决定行为。
 
9.外观模式(Facade)
    为一个复杂子系统提供一个简单接口
    提供子系统额独立性
    在层次化结构中,可以使用Facade模式定义系统中的每一层的入口
 
10.策略模式(Strategy)
    策略模式又称为算法族模式,就是定义了不同的算法族,并且相互之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
    策略模式属于对象行为型模式。
    策略模式中存在如下几个对象:
        环境对象:该类中实现了对抽象策略中定义的接口或者抽象类的引用
        抽象策略模式:它可由接口或抽象类来实现
        具体抽象模式:它封装了实现不同功能的不同算法
       
11.访问者模式(Visitor)
    行为作为访问者,被访问对象接受,然后由访问对象执行    
 
12.观察者模式(Observer)
    对象的行为型模式,又叫发表-订阅模式
    抽象主题角色
    抽象观察者角色
    具体主题角色
    具体观察者角色
 
    观察者模式的优点
        观察者模式在被观察者和观察者之间建立一个抽象的耦合。被观察者角色所知道的只是一个具体的观察者列表,每一个具体的观察者都符合一个抽象观察者接口。
        观察者模式支持广播通信
 
    观察者模式
        如果一个被观察者对象有很多的直接和间接的观察者的话,将所有观察者都通知到会花费很多时间
        如果在被观察者之间存在循环依赖,被观察者会触发它们之间的循环调用,导致系统崩溃
        如果对观察者的通知是通过另外的线程进行异步投递的话,系统必须保证投递是以自洽的方式进行
 
   13.中介者模式
        用一个中介对象来封装一系列交互对象
    Mediator: 中介者接口
    ConcreteMediator: 具体中介者实现对象。它需要维护各个同事对象之间的交互关系
    Colleague: 同事类定义,所有具体同事类的父类,通常实现成抽象类,主要负责约束同事对象的类型,并实现一些具体同事类之间的功能。
    ConcreteColleague: 具体的同事类,实现自己的业务,在需要与其他同事通信的时候,就与持有的中介者通信,中介者负责与其他同事进行交互。
 
    广义中介者
        去掉同事对象的父类
        同事不定义Mediator接口,把具体的中介者实现成单例
        同事对象不再持有中介者对象,而是在具体处理方法里面创建,或者获取,或者从参数传入需要的同事对象 
 
    14.备忘录模式
        在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
        原发起类(Originator) 创建一个备忘对象,使用备忘录存储它的内部状态
        负责人类(CareTaker)  负责保存好备忘录对象,不能检查或者操作备忘录的内容
        备忘录类(Memento)  将原发器的内部状态存储起来,原发器根据需要决定备忘录存储原发器的哪些内部状态。防止原发器以外的其他对象访问备忘录。备忘录有两个接口,一个是窄接口,一个是宽接口。CareTaker 只能看到窄接口,它只能把备忘录传递给其他对象。相反,Originator看到是一个宽接口,允许它访问返回到先前状态所需的数据
        
    15.代理模式
        代理模式也称为委托模式,它是一项基本设计技巧。需要其他的模式(例如状态模式、策略模式、访问者模式)本质上是在更特殊的场合采用了代理模式。而且在日常的应用中,代理模式可以提供非常好的访问控制。
        Subject(抽象主题角色) 普通的业务类型定义
        RealSubject(具体主题角色)业务逻辑的具体执行者
        Proxy(代理主题角色) 负责对真实角色的应用,且对真实角色处理完毕的事情做预处理和善后工作
    普通代理
    强制代理
    虚拟代理
 
    代理模式总结
        职责清晰:真实的角色就是实现实际的业务逻辑,无须关心其他非本职职责的事务,通过后期的代理完成一件事务。
        高扩展性:具体主题角色是随时都会发生变化的,只要它实现了接口,便被接口的规范约定
    
    16.装饰模式
        装饰模式包裹真实对象
    
17.工厂模式
    简单工厂模式
        不满足OCP原则,是为了提供接口实例化的选择
    工厂方法模式
        为了满足OCP原则而生
    抽象工厂模式
        对简单工厂模式的维度切分做了更加细致的规范
 
 
18.单例模式
    系统级别存在一个唯一的实例
    饿汉式加载
    懒汉式加载    -- 需要使用同步锁机制进行
    双重检验加锁    -- 为了解决懒汉式加载的性能慢问题,但是需要使用一个关键字volatile
    静态内部类加载    -- 通过静态内部类方式解决性能问题
 
 
19. 建造者模式
    将复杂的内部创建封装在内部,对于外部调用的人来说,只需要传入建造者和建造工具,关于内部是如何建造成成品的,调用者无需关系,实际设计与施工解耦,互不干扰。
 
20. 原型模式的总结
    相比new的方式创建对象,原型模式性能优良
    直接通过clone复制,构造函数是不会执行的
 
21. 迭代器
        将数据存储和数据遍历的职责分离,增加新的聚合类需要对应增加新的迭代器类。
 
 
    
 
 
 
 
 
 

设计模式初探

标签:

原文地址:http://www.cnblogs.com/zhaojunyang/p/5686622.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!