美文网首页
2020-06-14 状态模式和代理模式

2020-06-14 状态模式和代理模式

作者: ShawnPanCn | 来源:发表于2020-06-14 22:49 被阅读0次

状态模式

:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类

——将状态封装成独立的类,将动作委托给当前状态对象,所以行为会随着内部状态的变化而变化

特点:

允许一个对象基于不用的状态有不同的行为

把变化的东西取出来,局部化每个状态的行为,每个状态的行为局部化到自己的类中,遵守“封装变化”原则,减少了繁琐的if语句,满足“对修改关闭,对扩展开放”原则,便于阅读与理解

所有的状态实现共同的state接口,state接口可以作为抽象类,减少代码冗余,默认实现可以作为不支持操作

实体对象包含它的每一个状态,当前状态总是这些状态之一,当动作被调用时,它会把动作委派给当前的状态完成

注意:

状态的转换可以在Context中实现(状态转换是固定的),亦可在具体的状态类中实现(状态转化是动态的,状态类之间产生了依赖)

客户不可以直接改变Context中的状态

状态可以被共享

明确主机的行为与主机的状态的之间的关系,主机的某种状态的操作可以操作主机的行为。

状态模式vs策略模式: 

均允许对象通过组合和委托拥有不同的行为或算法

状态模式的的当前状态游走于对象的状态集合之间,状态的改变是有方案的,客户不了解状态变化的方式;策略模式客户主动指定状态中的哪一个

代理模式

:为另一个对象提供一个替身或占位符控制这个对象的访问

特点:

让代理对象控制对象的访问,被代理对象可以是远程对象(远程代理),创建开销较大对象(虚拟代理),或需要安全控制的对象(保护代理)

为另一个对象提供代表,以便控制客户对对象的访问

代理分类:

远程代理:好比远程对象(在不同JVM虚拟机的对象)的本地代表(本地方法的行为转移到远程),帮助我们处理网络上的细节

代理假装自己是远程对象,不过只是一个中间角色,处理访问远程对象

Java RMI提供了客户辅助对象stub和服务辅助对象skeleton,并为其提供相同的方法

注意方法返回值需要设置为可序列化对象Serializable,不需要序列化的状态变量使用transient声明

注意处理远程访问异常

执行过程:从远程获取代理对象 -》客户调用代理对象的方法 -》调用发送到远程 -》远程接受调用信息并在具体对象上操作 -》获得结果返回给代理 -》代理把结果告诉客户

虚拟代理:作为创建开销大的对象的代表

在大对象创建前和创建中由虚拟对象代替大对象,在创建完毕后将动作委派给大对象

保护代理:通过代理实现不同的用户对对象有不同的访问权限

动态代理:通过反射在运行过程中动态的创建代理,根据传入的接口集创建。Java内置动态代理支持

防火墙代理:控制网络资源的访问,保护主题免于坏客户的侵害

智能引用代理:当主题被引用时,进行额外的动作,例如记录独享被引用的次数

缓存代理:为开销大的运算结果提供暂时存储;允许多个客户共享结果,减少计算或网络延迟

同步代理:多线程下为主题提供安全访问

复杂隐藏代理:用来隐藏一个类的复杂集合的复杂度

写入时复制代理:用来控制对象的复制,延迟对象的复制,知道客户真的需要

相关文章

  • 2020-06-14 状态模式和代理模式

    状态模式 :允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类 ——将状态封装成独立的类,将动作委托...

  • java 代理模式 3/23

    代理模式 1. 代理模式介绍 代理模式也称为委托模式,它是一项基本技巧。许多其他的模式(状态模式、策略模式、访问者...

  • 设计模式[8]-代理模式-Proxy Pattern

    1. 代理模式 代理模式(Proxy Pattern)是常用的结构性设计模式,和装饰者模式非常相似,代理类和被代理...

  • 设计模式总结

    以下设计模式大致分为两类,常用和不常用的 常用 单例模式、工厂模式、适配器模式代理模式、外观模式、观察者模式状态模...

  • 设计模式--代理模式

    目录 本文的结构如下: 引言 什么是代理模式 模式的结构 典型代码 代理模式分类 代码示例 代理模式和装饰者模式的...

  • iOS开发之设计模式 - 代理模式

    由《大话设计模式 - 代理模式》的OC和部分Swift的语言转义 代理模式 继上一篇《装饰模式》 代理模式 小明追...

  • 设计模式实际应用之购物车

    1. 类图 2. 用到的设计模式 ◆工厂模式 单例模式◆装饰器模式 观察者模式◆状态模式 模板方法模式 代理模式 ...

  • 设计模式实践

    工厂模式 策略模式 状态模式 责任链模式 代理模式 单例模式 适配器模式 设计模式原则 面向对象的设计模式有七大基...

  • spring框架中的设计模式二

    在这篇文章中,介绍4种设计模式。结构型设计模式:代理和复合模式。行为型设计模式:策略和模板方法模式。 代理模式 面...

  • 09.代理模式和装饰模式的区别

    代理模式和装饰模式 代理模式UML代理模式类图 装饰模式UML装饰模式类图从类图来看,二者除了名称不同,几乎没有差...

网友评论

      本文标题:2020-06-14 状态模式和代理模式

      本文链接:https://www.haomeiwen.com/subject/inhqxktx.html