作者小头像 Lv.2
83 成长值

个人介绍

萌新,目前学生一枚,希望经过特训毕业可以找到一份满意的工作

感兴趣或擅长的领域

人工智能、数据库、编程语言
个人勋章
TA还没获得勋章~
成长雷达
0
48
0
15
20

个人资料

个人介绍

萌新,目前学生一枚,希望经过特训毕业可以找到一份满意的工作

感兴趣或擅长的领域

人工智能、数据库、编程语言

达成规则

发布时间 2021/07/06 15:43:54 最后回复 @Wu 2021/08/09 16:36:10 版块 社区活动
6925 156 1
他的回复:
华为云帐号:hw27621456+第四周学习笔记Java面向对象之枚举和包装类及设计模式1、什么是枚举 Java中的枚举是一种类型,顾名思义:就是一个一个列举出来。所以它一般都是表示一个有限的集合类型,它是一种类型。枚举是一个被命名的整型常数的集合,用于声明一组带标识符的常数。在维基百科中给出的定义是:在数学和计算机科学理论中,一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。这两种类型经常(但不总是)重叠.。枚举是一个被命名的整型常数的集合,枚举在日常生活中很常见,例如表示星期的SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY、SATURDAY就是一个枚举。在Java5之前,其实是没有enum的,在JDK的枚举类型出现之前,主要依托的是Enumeration这个枚举器接口,具体的设计需要手动去实现,而实现了Enumeration接口的类负责对设计的类似枚举类进行迭代。但是这些设计都有这样或那样的不足,可能是性能上的,可能是使用上的,甚至可能是线程安全上的。2、枚举类的定义在定义枚举类型时我们使用的关键字是enum,与class关键字类似,只不过前者是定义枚举类型,后者是定义类类型。声明枚举时必须使用 enum 关键字,然后定义枚举的名称、可访问性、基础类型和成员等。枚举声明的语法如下:enum-modifiers enum enumname:enum-base {    enum-body,}其中,enum-modifiers 表示枚举的修饰符主要包括 public、private 和 internal;enumname 表示声明的枚举名称;enum-base 表示基础类型;enum-body 表示枚举的成员,它是枚举类型的命名常数。任意两个枚举成员不能具有相同的名称,且它的常数值必须在该枚举的基础类型的范围之内,多个枚举成员之间使用逗号分隔。如果没有显式地声明基础类型的枚举,那么意味着它所对应的基础类型是 int。3、枚举类Java 中的每一个枚举都继承自 java.lang.Enum 类。当定义一个枚举类型时,每一个枚举类型成员都可以看作是 Enum 类的实例,这些枚举成员默认都被 final、public, static 修饰,当使用枚举类型成员时,直接使用枚举名称调用成员即可。所有枚举实例都可以调用 Enum 类的方法,常用方法如表 1 所示。表 1 Enum类的常用方法方法名称描述values()以数组形式返回枚举类型的所有成员valueOf()将普通字符串转换为枚举实例compareTo()比较两个枚举成员在定义时的顺序ordinal()获取枚举成员的索引位置         4、包装类什么是包装类型Java 设计当初就提供了 8 种 基本数据类型及对应的 8 种包装数据类型。我们知道 Java 是一种面向对象编程的高级语言,所以包装类型正是为了解决基本数据类型无法面向对象编程所提供的。包装类创建对象的方式就跟其他类一样。下面是基本数据类型与对应的包装类型。基本数据类型包装类型byteBytebooleanBooleanshortShortcharCharacterintIntegerlongLongfloatFloatdoubleDouble5、自动装箱拆箱机制Java为了方便我们使用,以及出于其他目的如性能调优,给我们提供了自动装箱、拆箱机制。这种机制简化了基本类型和包装类型的转换。除了使用new关键字,还可以使用Integer类的valueOf()方法创建一个Integer对象。这两个方式是有所区别的。6、包装类的缓存机制只要Integer类第一次被使用到,Integer的静态内部类就被加载,加载的时候会创建-128到127的Integer对象,同时创建一个数组cache来缓存这些对象。当使用valueOf()方法创建对象时,就直接返回已经缓存的对象,也就是说不会再新建对象;当使用new关键字or使用valueOf()方法创建小于-128大于127的值对象时,就会创建新对象。equals()方法比较的是Integer对象的值,而不是像==一样比较的是对象是否是同一个对象。所以,当需要比较两个Integer对象的值是否相等时,记住要用equals()方法。用==比较的话由于缓存机制的存在,可能产生一些让人困扰的结果。此外,在8种包装类型中,有缓存区的有Character、Byte、Short、Integer、Long,而且它们的实现方式基本一样,都是-128到127的缓存范围。Boolean虽然没有缓存区,但是因为只有两个值true、false,所以Boolean在成员变量中就创建了两个相应的对象。没有缓存区的只有Float、Double,之所以没有原因很简单,即便是0到1这么小的范围,浮点数也有无数个,使用缓存区缓存它们不具备可能性和实用性。缓存区的存在使得常用的包装类对象可以得到复用,这有利于提升性能。当我们需要创建新对象的时候再new一个,增加了灵活性。
发布时间 2021/07/06 15:43:54 最后回复 @Wu 2021/08/09 16:36:10 版块 社区活动
6925 156 1
他的回复:
华为云帐号:hw27621456+第六周学习笔记Java面向对象之枚举和包装类及设计模式1、什么是枚举 Java中的枚举是一种类型,顾名思义:就是一个一个列举出来。所以它一般都是表示一个有限的集合类型,它是一种类型。枚举是一个被命名的整型常数的集合,用于声明一组带标识符的常数。在维基百科中给出的定义是:在数学和计算机科学理论中,一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。这两种类型经常(但不总是)重叠.。枚举是一个被命名的整型常数的集合,枚举在日常生活中很常见,例如表示星期的SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY、SATURDAY就是一个枚举。在Java5之前,其实是没有enum的,在JDK的枚举类型出现之前,主要依托的是Enumeration这个枚举器接口,具体的设计需要手动去实现,而实现了Enumeration接口的类负责对设计的类似枚举类进行迭代。但是这些设计都有这样或那样的不足,可能是性能上的,可能是使用上的,甚至可能是线程安全上的。2、枚举类的定义在定义枚举类型时我们使用的关键字是enum,与class关键字类似,只不过前者是定义枚举类型,后者是定义类类型。声明枚举时必须使用 enum 关键字,然后定义枚举的名称、可访问性、基础类型和成员等。枚举声明的语法如下:enum-modifiers enum enumname:enum-base {    enum-body,}其中,enum-modifiers 表示枚举的修饰符主要包括 public、private 和 internal;enumname 表示声明的枚举名称;enum-base 表示基础类型;enum-body 表示枚举的成员,它是枚举类型的命名常数。任意两个枚举成员不能具有相同的名称,且它的常数值必须在该枚举的基础类型的范围之内,多个枚举成员之间使用逗号分隔。如果没有显式地声明基础类型的枚举,那么意味着它所对应的基础类型是 int。3、枚举类Java 中的每一个枚举都继承自 java.lang.Enum 类。当定义一个枚举类型时,每一个枚举类型成员都可以看作是 Enum 类的实例,这些枚举成员默认都被 final、public, static 修饰,当使用枚举类型成员时,直接使用枚举名称调用成员即可。所有枚举实例都可以调用 Enum 类的方法,常用方法如表 1 所示。表 1 Enum类的常用方法方法名称描述values()以数组形式返回枚举类型的所有成员valueOf()将普通字符串转换为枚举实例compareTo()比较两个枚举成员在定义时的顺序ordinal()获取枚举成员的索引位置         4、包装类什么是包装类型Java 设计当初就提供了 8 种 基本数据类型及对应的 8 种包装数据类型。我们知道 Java 是一种面向对象编程的高级语言,所以包装类型正是为了解决基本数据类型无法面向对象编程所提供的。包装类创建对象的方式就跟其他类一样。下面是基本数据类型与对应的包装类型。基本数据类型包装类型byteBytebooleanBooleanshortShortcharCharacterintIntegerlongLongfloatFloatdoubleDouble5、自动装箱拆箱机制Java为了方便我们使用,以及出于其他目的如性能调优,给我们提供了自动装箱、拆箱机制。这种机制简化了基本类型和包装类型的转换。除了使用new关键字,还可以使用Integer类的valueOf()方法创建一个Integer对象。这两个方式是有所区别的。6、包装类的缓存机制只要Integer类第一次被使用到,Integer的静态内部类就被加载,加载的时候会创建-128到127的Integer对象,同时创建一个数组cache来缓存这些对象。当使用valueOf()方法创建对象时,就直接返回已经缓存的对象,也就是说不会再新建对象;当使用new关键字or使用valueOf()方法创建小于-128大于127的值对象时,就会创建新对象。equals()方法比较的是Integer对象的值,而不是像==一样比较的是对象是否是同一个对象。所以,当需要比较两个Integer对象的值是否相等时,记住要用equals()方法。用==比较的话由于缓存机制的存在,可能产生一些让人困扰的结果。此外,在8种包装类型中,有缓存区的有Character、Byte、Short、Integer、Long,而且它们的实现方式基本一样,都是-128到127的缓存范围。Boolean虽然没有缓存区,但是因为只有两个值true、false,所以Boolean在成员变量中就创建了两个相应的对象。没有缓存区的只有Float、Double,之所以没有原因很简单,即便是0到1这么小的范围,浮点数也有无数个,使用缓存区缓存它们不具备可能性和实用性。缓存区的存在使得常用的包装类对象可以得到复用,这有利于提升性能。当我们需要创建新对象的时候再new一个,增加了灵活性。7、设计模式之单例模式单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。注意:1、单例类只能有一个实例。2、单例类必须自己创建自己的唯一实例。3、单例类必须给所有其他对象提供这一实例。介绍意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。主要解决:一个全局使用的类频繁地创建与销毁。何时使用:当您想控制实例数目,节省系统资源的时候。如何解决:判断系统是否已经有这个单例,如果有则返回,如果没有则创建。关键代码:构造函数是私有的。 8、设计模式之策略模式策略模式(Strategy)属于对象行为型设计模式,主要是定义一系列的算法,把这些算法一个个封装成拥有共同接口的单独的类,并且使它们之间可以互换。策略模式使这些算法在客户端调用它们的时候能够互不影响地变化。这里的算法不要狭义的理解为数据结构中算法,可以理解为不同的业务处理方法。策略模式由三个角色组成: 1) 算法使用环境(Context)角色:算法被引用到这里和一些其它的与环境有关的操作一起来完成任务。 2) 抽象策略(Strategy)角色:规定了所有具体策略角色所需的接口。在 java 它通常由接口或者抽象类来实现。 3) 具体策略(Concrete Strategy)角色:实现了抽象策略角色定义的接口。 9、设计模式之工厂模式工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。 工厂模式在《Java 与模式》中分为三类: 1)简单工厂模式(Simple Factory) 2)工厂方法模式(Factory Method) 3)抽象工厂模式(Abstract Factory) 这三种模式从上到下逐步抽象,并且更具一般性。简单工厂模式又称静态工厂方法模式。重命名上就可以看出这个模式一定很简单。它存在的目的很简单:定义一个用于创建对象的接口。它的组成如下:1) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。 2) 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。 3) 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。  工厂方法模式去掉了简单工厂模式中工厂方法的静态属性,使得它可以被子类继承。这样在简单工厂模式里集中在工厂方法上的压力可以由工厂方法模式里不同的工厂子类来分担。 工厂方法模式的结构组成: 1) 抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在 java 中它由抽象类或者接口来实现。2) 具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。3) 抽象产品角色:它是具体产品继承的父类或者是实现的接口。在 java 中一般有抽象类或者接口来实现。 4) 具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在 java 中由具体的类来实现。 抽象工厂模式的用意为:给客户端提供一个接口,可以创建多个产品族中的产品对象 而且使用抽象工厂模式还要满足一下条件: 1) 系统中有多个产品族,而系统一次只可能消费其中一族产品。 2) 同属于同一个产品族的产品以其使用。 工厂模式的各个角色(和工厂方法的如出一辙): 1) 抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在 java 中它由抽象类或者接口来实现。 2) 具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。在 java 中它由具体的类来实现。 3) 抽象产品角色:它是具体产品继承的父类或者是实现的接口。在 java 中一般有抽象类或者接口来实现。 4) 具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在 java 中由具体的类来实现。 10、设计模式之代理模式代理模式有两个英文名字:Proxy Pattern 和 Surrogate Pattern。代理模式的定义为:为其他对象提供一种代理以控制对这个对象的访问。说白了就是,在一些情况下客户不想或者不能直接引用一个对象,而代理对象可以在客户和目标对象之间起到中介作用,去掉客户不能看到的内容和服务或者增添客户需要的额外服务。代理模式中的“代理商”要想实现代理任务,就必须和被代理的“厂商”使用共同的接口(你可以想象为产品)。于是代理模式就有三个角色组成了: 1) 抽象主题角色:声明了真实主题和代理主题的共同接口。 2) 代理主题角色:内部包含对真实主题的引用,并且提供和真实主题角色相同的接口。 3) 真实主题角色:定义真实的对象。  11、设计模式之门面模式门面模式(facade)又称外观模式。GOF在《设计模式》一书中给出如下定义:为子系统中的一组接口提供一个一致的界面, Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。门面模式有三个角色组成: 1) 门面角色(facade):这是门面模式的核心。它被客户角色调用,因此它熟悉子系统的功能。它内部根据客户角色已有的需求预定了几种功能组合。 2) 子系统角色:实现了子系统的功能。对它而言,facade角色就和客户角色一样是未知的,它没有任何facade角色的信息和链接。3) 客户角色:调用facade角色来完成要得到的功能。
发布时间 2021/07/06 15:43:54 最后回复 @Wu 2021/08/09 16:36:10 版块 社区活动
6925 156 1
他的回复:
华为云帐号:hw27621456+第六周学习笔记Java面向对象之枚举和包装类及设计模式1、什么是枚举 Java中的枚举是一种类型,顾名思义:就是一个一个列举出来。所以它一般都是表示一个有限的集合类型,它是一种类型。枚举是一个被命名的整型常数的集合,用于声明一组带标识符的常数。在维基百科中给出的定义是:在数学和计算机科学理论中,一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。这两种类型经常(但不总是)重叠.。枚举是一个被命名的整型常数的集合,枚举在日常生活中很常见,例如表示星期的SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY、SATURDAY就是一个枚举。在Java5之前,其实是没有enum的,在JDK的枚举类型出现之前,主要依托的是Enumeration这个枚举器接口,具体的设计需要手动去实现,而实现了Enumeration接口的类负责对设计的类似枚举类进行迭代。但是这些设计都有这样或那样的不足,可能是性能上的,可能是使用上的,甚至可能是线程安全上的。2、枚举类的定义在定义枚举类型时我们使用的关键字是enum,与class关键字类似,只不过前者是定义枚举类型,后者是定义类类型。声明枚举时必须使用 enum 关键字,然后定义枚举的名称、可访问性、基础类型和成员等。枚举声明的语法如下:enum-modifiers enum enumname:enum-base {    enum-body,}其中,enum-modifiers 表示枚举的修饰符主要包括 public、private 和 internal;enumname 表示声明的枚举名称;enum-base 表示基础类型;enum-body 表示枚举的成员,它是枚举类型的命名常数。任意两个枚举成员不能具有相同的名称,且它的常数值必须在该枚举的基础类型的范围之内,多个枚举成员之间使用逗号分隔。如果没有显式地声明基础类型的枚举,那么意味着它所对应的基础类型是 int。3、枚举类Java 中的每一个枚举都继承自 java.lang.Enum 类。当定义一个枚举类型时,每一个枚举类型成员都可以看作是 Enum 类的实例,这些枚举成员默认都被 final、public, static 修饰,当使用枚举类型成员时,直接使用枚举名称调用成员即可。所有枚举实例都可以调用 Enum 类的方法,常用方法如表 1 所示。表 1 Enum类的常用方法方法名称描述values()以数组形式返回枚举类型的所有成员valueOf()将普通字符串转换为枚举实例compareTo()比较两个枚举成员在定义时的顺序ordinal()获取枚举成员的索引位置         4、包装类什么是包装类型Java 设计当初就提供了 8 种 基本数据类型及对应的 8 种包装数据类型。我们知道 Java 是一种面向对象编程的高级语言,所以包装类型正是为了解决基本数据类型无法面向对象编程所提供的。包装类创建对象的方式就跟其他类一样。下面是基本数据类型与对应的包装类型。基本数据类型包装类型byteBytebooleanBooleanshortShortcharCharacterintIntegerlongLongfloatFloatdoubleDouble5、自动装箱拆箱机制Java为了方便我们使用,以及出于其他目的如性能调优,给我们提供了自动装箱、拆箱机制。这种机制简化了基本类型和包装类型的转换。除了使用new关键字,还可以使用Integer类的valueOf()方法创建一个Integer对象。这两个方式是有所区别的。6、包装类的缓存机制只要Integer类第一次被使用到,Integer的静态内部类就被加载,加载的时候会创建-128到127的Integer对象,同时创建一个数组cache来缓存这些对象。当使用valueOf()方法创建对象时,就直接返回已经缓存的对象,也就是说不会再新建对象;当使用new关键字or使用valueOf()方法创建小于-128大于127的值对象时,就会创建新对象。equals()方法比较的是Integer对象的值,而不是像==一样比较的是对象是否是同一个对象。所以,当需要比较两个Integer对象的值是否相等时,记住要用equals()方法。用==比较的话由于缓存机制的存在,可能产生一些让人困扰的结果。此外,在8种包装类型中,有缓存区的有Character、Byte、Short、Integer、Long,而且它们的实现方式基本一样,都是-128到127的缓存范围。Boolean虽然没有缓存区,但是因为只有两个值true、false,所以Boolean在成员变量中就创建了两个相应的对象。没有缓存区的只有Float、Double,之所以没有原因很简单,即便是0到1这么小的范围,浮点数也有无数个,使用缓存区缓存它们不具备可能性和实用性。缓存区的存在使得常用的包装类对象可以得到复用,这有利于提升性能。当我们需要创建新对象的时候再new一个,增加了灵活性。7、设计模式之单例模式单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。注意:1、单例类只能有一个实例。2、单例类必须自己创建自己的唯一实例。3、单例类必须给所有其他对象提供这一实例。介绍意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。主要解决:一个全局使用的类频繁地创建与销毁。何时使用:当您想控制实例数目,节省系统资源的时候。如何解决:判断系统是否已经有这个单例,如果有则返回,如果没有则创建。关键代码:构造函数是私有的。类图如下: 8、设计模式之策略模式策略模式(Strategy)属于对象行为型设计模式,主要是定义一系列的算法,把这些算法一个个封装成拥有共同接口的单独的类,并且使它们之间可以互换。策略模式使这些算法在客户端调用它们的时候能够互不影响地变化。这里的算法不要狭义的理解为数据结构中算法,可以理解为不同的业务处理方法。策略模式由三个角色组成: 1) 算法使用环境(Context)角色:算法被引用到这里和一些其它的与环境有关的操作一起来完成任务。 2) 抽象策略(Strategy)角色:规定了所有具体策略角色所需的接口。在 java 它通常由接口或者抽象类来实现。 3) 具体策略(Concrete Strategy)角色:实现了抽象策略角色定义的接口。 策略模式各个角色之间关系的类图表示:  9、设计模式之工厂模式工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。 工厂模式在《Java 与模式》中分为三类: 1)简单工厂模式(Simple Factory) 2)工厂方法模式(Factory Method) 3)抽象工厂模式(Abstract Factory) 这三种模式从上到下逐步抽象,并且更具一般性。简单工厂模式又称静态工厂方法模式。重命名上就可以看出这个模式一定很简单。它存在的目的很简单:定义一个用于创建对象的接口。它的组成如下:1) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。 2) 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。 3) 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。 用类图来清晰的表示下的它们之间的关系:  工厂方法模式去掉了简单工厂模式中工厂方法的静态属性,使得它可以被子类继承。这样在简单工厂模式里集中在工厂方法上的压力可以由工厂方法模式里不同的工厂子类来分担。 工厂方法模式的结构组成: 1) 抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在 java 中它由抽象类或者接口来实现。2) 具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。3) 抽象产品角色:它是具体产品继承的父类或者是实现的接口。在 java 中一般有抽象类或者接口来实现。 4) 具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在 java 中由具体的类来实现。 用类图来清晰的表示下的它们之间的关系: 抽象工厂模式的用意为:给客户端提供一个接口,可以创建多个产品族中的产品对象 而且使用抽象工厂模式还要满足一下条件: 1) 系统中有多个产品族,而系统一次只可能消费其中一族产品。 2) 同属于同一个产品族的产品以其使用。 工厂模式的各个角色(和工厂方法的如出一辙): 1) 抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在 java 中它由抽象类或者接口来实现。 2) 具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。在 java 中它由具体的类来实现。 3) 抽象产品角色:它是具体产品继承的父类或者是实现的接口。在 java 中一般有抽象类或者接口来实现。 4) 具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在 java 中由具体的类来实现。 类图如下: 10、设计模式之代理模式代理模式有两个英文名字:Proxy Pattern 和 Surrogate Pattern。代理模式的定义为:为其他对象提供一种代理以控制对这个对象的访问。说白了就是,在一些情况下客户不想或者不能直接引用一个对象,而代理对象可以在客户和目标对象之间起到中介作用,去掉客户不能看到的内容和服务或者增添客户需要的额外服务。代理模式中的“代理商”要想实现代理任务,就必须和被代理的“厂商”使用共同的接口(你可以想象为产品)。于是代理模式就有三个角色组成了: 1) 抽象主题角色:声明了真实主题和代理主题的共同接口。 2) 代理主题角色:内部包含对真实主题的引用,并且提供和真实主题角色相同的接口。 3) 真实主题角色:定义真实的对象。 使用类图来表示下三者间的关系如下: 11、设计模式之门面模式门面模式(facade)又称外观模式。GOF在《设计模式》一书中给出如下定义:为子系统中的一组接口提供一个一致的界面, Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。门面模式有三个角色组成: 1) 门面角色(facade):这是门面模式的核心。它被客户角色调用,因此它熟悉子系统的功能。它内部根据客户角色已有的需求预定了几种功能组合。 2) 子系统角色:实现了子系统的功能。对它而言,facade角色就和客户角色一样是未知的,它没有任何facade角色的信息和链接。3) 客户角色:调用facade角色来完成要得到的功能。