java设计模式的实现之单例模式、状态模式

44 2021-10-06 10:07

关键字:static

类的内部可以有多个嵌套公共静态类,但是一个 Java 源文件只能有一个顶级公共类,并且顶级公共类的名称与源文件名称必须一致。

java中普通的顶级类是不能使用static关键字修饰的。只有内部类可以使用static修饰。

静态内部类和非静态内部类之间到底有什么不同呢?下面是两者间主要的不同。

    (1)内部静态类不需要有指向外部类的引用。但非静态内部类需要持有对外部类的引用。

    (2)非静态内部类能够访问外部类的静态和非静态成员。静态类不能访问外部类的非静态成员。他只能访问外部类的静态成员。

    (3)一个非静态内部类不能脱离外部类实体被创建,一个非静态内部类可以访问外部类的数据和方法,因为他就在外部类里面。

 

如果Java 两个class之间相互调用,会导致“init内存溢出”。建议不要使用类之间的互相调用,写接口,用接口来进行桥接。但是!!!如果想要使用上述两种设计模式,那么就必须让第一调用方去调用第二调用方,第二调用方又含着第一调用方,那么需要第二调用方的类实例,定义成static。

如果第一调用方和第二调用方都是自己,那么就是单例。而状态模式,利用的恰好也是全局有统一的唯一的状态变量。但是不管如何,都不会有克莱因瓶或者莫比乌斯环的两面一体。互相调用会导致内存溢出。只有设计巧妙,最终归于一个或多个状态的全局变量才可能实现这两种模式。

 

而全局变量的实现就是static属性。static的物理实现就是脱离于

全部评论

·