关于不变模式和String,StringBuff…
来源:互联网 发布:国家的崛起人工智能 编辑:程序博客网 时间:2024/06/04 19:58
Java中有这么一个概念即ImmutableType,即不变类型。即某个类不能的状态一旦生成后就不能被改变,对应的设计模式称之为不变模式;
不变模式的实现思路是:
1 将所有的成员变量私有化,在内部进行初始化,并将该成员变量用final修饰,以防止外界用反射机制改变;
2不提供任何写方法,读方法中不能让外界获取成员的引用,而是一个成员的拷贝(如果获取到了当前对象的实例变量的引用,比如User类的user对象,你获取到了,就可以直接user.setUserName(),这样就改变了类的内部属性了,因此不安全),这样外界即使获取到了某个成员变量并对其进行改变,也是对拷贝的改变,并没有改变成员的状态;
根据这一思路不变模式又分为强不变模式和弱不变模式;
这是相对于子类来说,一个弱不变模式是保证本类状态不被改变,但是子类继承后,子类的状态可以改变;
而强不变模式是即保证本类对象不变,也保证子类的状态不变;
实现的思路:
1 将本类用final修饰,那么他就不能有子类;
2 将本类的所有方法用final修饰符修饰;那么子类就不能覆盖父类的方法以改变父类的状态;
String类就是一个强不变模式的典型代表,我们每次对一个字符串进行改变操作其实都是对这个对象的拷贝进行的操作,因为我们获取不到这个对象的引用。
因此不变模式的类是一个线程安全的类;
顺带提一下如果我们要使用字符串进行连接操作,即将几个字符串对象用+连接起来时,使用StringBuffer或者StringBuilder的append方法
然后在toString,因为我们直接用+连接会产生很多的中间对象以及该对象的拷贝,给gc带来压力。
具体的请参看我的另外一篇日志:http://rongqiang1992.blog.163.com/blog/static/21727620920134884022130/
- 关于不变模式和String,StringBuff…
- JDK - String 和 StringBuff
- string和stringbuff的区别
- String stringbuff的区别
- 也谈String和StringBuff之间的区别
- JAVA中String与StringBuff的区别
- String Stringbuff Stringbuilder的区别(初级
- 不变模式
- 不变模式
- 不变模式
- 不变模式
- Java之不变String
- Java StringBuff
- Java 不变模式
- 不变模式 immutable pattern
- 不变模式/Immutable
- 不变模式(Immutable)
- 不变模式immutable
- Git简单使用
- Java内存分析(转载)
- 关于百度地图 key 的问题
- 学习过程中碰到的问题集锦
- 关于String、StringBuffer、String…
- 关于不变模式和String,StringBuff…
- oracle数据库笔记之数据库基本管理
- oracle数据库之sql查询语句笔记
- 【转载】Linux下的javaee开发环境…
- 读《结网》
- dom4j和xpath解析带名称空间的xml…
- kali postgress connection
- 关于tomcat服务器getParameter对ge…
- 装饰设计模式---自定义数据源