GOF设计模式学习笔
文章平均质量分 52
ijbuhv
这个作者很懒,什么都没留下…
展开
-
状态模式(行为类)
UMLstate(抽象状态角色): 抽象类或接口,负责状态对象的定义,并且封装环境角色以实现状态切换ConcreteState(具体状态角色): 每一个具体状态角色必须完成两个职责:本状态的行为管理以及趋向状态处理,通俗的说就是本状态下要做的事和本状态如何过度到其他状态。Context(环境角色): 定义客户端需要的接口,并且负责具体状态的切换.介绍意图: 允许对象在内部状态改变时改变它的原创 2016-12-10 14:57:15 · 413 阅读 · 0 评论 -
单例模式(创建类)
UML介绍意图: 保证一个类仅有一个实例,并提供一个访问它的全局访问点。优点: 1.一个内存中只有一个实例,减少了内存的开销。2.避免对资源的多重占用缺点: 没有接口,与单一职责冲突应用: spring 中的bean类默认是单例的,这样spring可以管理其生命周期代码饿汉式public class SingletonHungry { private static Singleto原创 2016-12-18 14:54:20 · 355 阅读 · 0 评论 -
原型模式(创建类)
UML介绍意图: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。优点: 效率高,逃避构造约束缺点: 逃避构造约束例子AdvTemplatepublic class AdvTemplate { private String advContext ; private String advSubject ; public String getAdvCo原创 2016-12-18 13:53:40 · 288 阅读 · 0 评论 -
备忘录模式(行为类)
UML**Originator角色:**1.创建一个含有当前的内部状态的备忘录对象。2.使用备忘录对象存储其内部状态Mementor角色: 1.将发起人对象的内部状态存储起来。备忘录可以根据Originator对象的判断来决定存储多少Originator对象的内部状态负责人Caretaker角色: 1.负责保存备忘录对象。2.不检查备忘录对象的内容介绍意图: 在不破坏封装性的前提下,捕获一个原创 2016-12-07 13:55:19 · 375 阅读 · 0 评论 -
中介者模式(行为类)
UMLMediator角色: 抽象中介者角色定义统一的接口,用于各同事角色之间通信ConcreteMediator角色: 具体中介者角色通过协调各同事角色实现协作行为,因此它必须依赖各个同事角色Colleague 角色: 每个同事角色都知道中介者角色,而且与其他同事角色通信的时候,一定要通过中介者角色协作。每个同事角色分为两种,一种是同事本身的行为,比如改变自身的状态,处理自己的行为等,叫原创 2016-12-06 14:27:25 · 204 阅读 · 0 评论 -
命令模式(行为类)
UMLreceiver角色: 该角色是干活的角色,命令传递到这里是应该被执行的Command角色: 需要执行的命令都需要在这里执行Invoker角色: 接收到命令,并执行命令介绍意图: 将一个请求封装为一个命令,从而使得不同的请求对客户参数化优点: 1、降低了系统耦合度。 2、新的命令可以很容易添加到系统中去。缺点: 使用命令模式可能会导致某些系统有过多的具体命令类。用途: 模原创 2016-12-05 16:34:45 · 345 阅读 · 0 评论 -
门面模式(结构类)
UML介绍意图: 为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。优点: 1.减少系统依赖 2.提高灵活性 3.提高安全性缺点: 不符合开闭原则实践: java三层开发模式例子UML描述一个家庭影院项目代码HomeTheaterFacade (Facade)public class HomeTheaterFacade { p原创 2016-12-04 13:30:21 · 384 阅读 · 0 评论 -
桥接模式(结构型)
UMLAbstraction-抽象化角色:主要职责是定义出该角色的行为,同时保存一个实现化角色的引用,该角色一般是抽象类Implementoe-实现化角色:定义角色必须的行为和属性RefinedAbstraction-修正抽象化角色:对抽象化角色修正ConcreteImpementor-具体实现化角色:实现接口或抽象类定义的方法和属性介绍意图:将抽象部分与实现部分分离,使它们都可以独立的原创 2016-12-03 16:31:46 · 620 阅读 · 0 评论 -
装饰模式(结构类)
UMLcomponent角色: Component 是一个接口或者一个抽象类,就是定义我们最核心的对象,也就是最原始的对象ConcreteComponent 角色: 定义一个将要接收附加责任的类Decorator角色: 持有一个构建对象的实例,并定义一个与抽象构件接口一致的接口Concrete Decorator角色: 负责给构件对象”贴上”附加的责任描述意图:动态地给一个对象添加一些额原创 2016-12-03 15:23:31 · 366 阅读 · 0 评论 -
观察者模式(行为类)
UMLsubject(抽象主题角色): 主题角色将所有观察者对象的引用存入一个集合中,并且提供方法增加和删除观察者。Observer(抽象观察者对象): 为所有观察者对象定义一个接口,在得到抽象主题的通知时更新自己。ConcreteSubject(具体主题角色): 在具体主题的内部状态发生改变时,给所有登记过的观察者发出通知。ConcreteObserver(具体观察者角色): 存储于主题角原创 2016-12-12 13:49:38 · 346 阅读 · 0 评论 -
适配器模式(结构类)
UML介绍意图: 将一个类的接口转换成客户希望的另一个接口。使得原来由于接口不兼容而不能一起工作的类可以一起工作优点: 1.可以让任何没有关联的类一起运行。2.提高了类的复用缺点:过多地使用适配器,会让系统非常零乱,不易整体进行把握。应用举例: 1.linux 上运行windows程序。2.java 中的jdbc例子UML IUserInfo(Target)public interfac原创 2016-11-20 20:34:36 · 356 阅读 · 0 评论 -
建造者模式(创建类)
UML介绍意图: 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示优点: 建造者独立,易扩展缺点: 内部实现复杂,会有很多建造类例子UML CarModelpublic abstract class CarModel { private List<String> sequence = new ArrayList<String>() ; protecte原创 2016-11-19 20:46:47 · 409 阅读 · 0 评论 -
抽象工厂设计模式(创建类)
UML介绍意图:提供一个创建一系列相互依赖对象地接口,而无需指定它们具体的类使用场景举例: 1.QQ换皮肤,一整套一起换。2.生成不同操作系统的程序(Windows , Linux )优点: 1.封装性,每个产品的实现类不是高层模块关心的,它关心的是接口。2.产品族内的约束是非公开状态。缺点:产品族扩展困难,添加一个产品族需要修改抽象工厂接口,并且需要修改所有工厂实现类的方法,但产品等级修改原创 2016-11-19 16:25:52 · 357 阅读 · 0 评论 -
工厂方法模式(创建类)
UML类图描述意图定义一个用于创建对象地接口,让子类决定实例化哪个类,工厂方法使一个类的实例化延迟到子类优点1.调用者想创建一个对象,只要知道其名称就可以了。2.屏蔽产品的具体实现,调用者只关心产品的接口缺点每次增加产品时都需要增加一个具体实现类和对应的工厂实现使用场景举例数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。2.设计一个连接服务器的框架,需要三个协议,原创 2016-11-19 14:50:26 · 332 阅读 · 0 评论 -
责任链模式(行为类)
UMLHandler(抽象处理角色): 定义一个处理请求的接口。如果需要,接口可以定义出一个方法,以设定和返回下家的引用。ConcreteHandler(具体处理者角色): 具体处理者角色接到请求后,可以选择将请求处理掉,或者传递到下家。介绍意图:避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。优点: 1原创 2016-12-11 13:49:00 · 324 阅读 · 0 评论 -
代理模式(结构类)
UML介绍意图: 为其他对象提供一种代理以控制对对象的访问优点: 1.职责清晰,真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件事,附带的结果就是编程简洁清晰。2.高扩展性,具体主题角色会发生变化,但代理角色可以不发生变化。3.智能化缺点: 1.由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。 2.实现代理模式需原创 2016-12-18 16:23:45 · 298 阅读 · 0 评论