代理设计模式和系统类
学习目的
代理模式是Java常见的设计模式之一。所谓代理模式是指客户端并不直接调用实际的对象,而是通过调用代理,来间接的调用实际的对象。在现实生活中,这种情形非常的常见,比如请一个律师代理来打官司。而代理设计模式的核心是利用接口实现数据回调。学习了解一些主要的系统类可以方便在今后的学习中快速高效的做项目。
知识点
- 代理设计模式
- String类的主要方法及使用
- 常见方法
- 可变字符串
解析
- 代理设计模式(利用接口实现数据回调)
1.1 定义⼀个接⼝,统⼀管理传递数据的⽅式 ,并且能保证每个使⽤
Setting的类都必须实现这个⽅法
/设置界面 设置字体大小和颜色
public class Setting {
//记录为谁设置 记录下我做完事情之后将数据返回给谁
FontSettingInterface obj;
//创建对象后 告诉是谁
public Setting(FontSettingInterface obj){
this.obj=obj;
}
//开始设置
public void startSetting(){
System.out.println("开始设置");
System.out.println("........");
System.out.println("设置完毕 即将返回结果");
//1.如果有可以访问的属性 直接通过属性给值
//比较少用 但对方没办法第一时间知道自己需要的值有了
// r1.color="red";
// r1.size=18;
//2.通过方法来回调
obj.change("red",26);
}
public interface FontSettingInterface{
void change(String color,int size);
}
}
1.2 使用Setting
- 实现接口
- 传递对象
- 实现方法
//阅读界面 显示文本
public class Read implements Setting.FontSettingInterface {
public void gotoSetting(){
Setting setting=new Setting(this);
setting.startSetting();
}
public void change(String color,int size){
System.out.println("改变后的颜色:"+color+"大小:"+size);
}
1.3 main函数调用显示
/**
* 接口实现回调 代理设计模式
*/
public class MyClass {
public static void main(String[] args) {
Read read=new Read();
read.gotoSetting();
}
}
- String类的主要方法及使用
2.1 不可变的字符串 一旦创建 内容不能改变
2.2相同:
- == 比较两个对象是否相同:地址
- equals 比较内容是否相同
String str1 = "abc";
String str2 = "abcd";
System.out.println(str1 == str2);
System.out.println(str1.equals(str2));
2.3 字符串的创建
String str1 = "abc";
2.4 StringBuffer / StringBuilder 可变字符串
//使用构造方法
//null 和 "" 的区别
String str3 = new String();//没意义
//使用字节数组 创建一个字符串
byte[] name = {'A','b','c'};
String str4 = new String(name);
System.out.println(str4);
byte[] name2 = {97,98,99};
String str5 = new String(name2);
System.out.println(str5);
//使用字节数组的一部分 创建一个字符串
String str6 = new String(name,0,2);
System.out.println(str6);
char[] hello = {'你','好','啊'};
String h = new String(hello);
System.out.println(h);
- 常见方法
方法 | 用途 | 实例 |
---|---|---|
charAt | 获取字符串中的一个字符 | char c = h.charAt(0);System.out.println(c); |
compareTo | 两个字符串的比较 | int result = str4.compareToIgnoreCase(str5);System.out.println(result); |
concat | 两个字符串的连接 | String nStr = str5.concat(h);System.out.println(nStr); |
contains | 判断一个字符串是否包含另外一个字符串 | boolean r = "hello".contains("lle");System.out.println(r); |
endsWith | 判断是否以某个字符串结尾 | String url = "http://www.baidu.com";if (url.endsWith(".com")){System.out.println("网址");} |
equals | 两个字符串进行比较 | if ("abc".equals("ABC")){System.out.println("相同");}else{System.out.println("不相同");} |
indexOf | 判断一个子字符串在另外一个字符串里面的位置,不存在返回值为-1 | String i1 = "hello Java"; int index = i1.indexOf("Javeee"); System.out.println(index); |
length | 获取字符串的长度 | String a="sss";a.length |
index | 获取子字符串substring 从index到结尾 | String sStr = i1.substring(6);System.out.println(sStr); |
substring | 从0开始 到5 | String sStr2 = i1.substring(4,7);System.out.println(sStr2); |
toCharArray | 将字符串转化为字符数组 | API |
toLowerCase / toUpperCase | 将所有字符转化为小写 | API |
trim | 将字符串前面和后面的空格字符删除 | API |
- 可变字符串
4.1 StringBuffer/StringBuilder :
- StringBuffer 线程安全 效率不高
- StringBuilder 线程不安全的 效率更高
4.2 常用方法(insert, append ,delete, replace)
// 创建的同时先准备好6个字符的空间
StringBuilder sb = new StringBuilder(6);
方法 | 用途 | 实例 |
---|---|---|
append | 在末尾追加 | sb.append("I");sb.append(" Love");sb.append(" Android");System.out.println(sb); |
insert | 插入数据 | sb.insert(2, "also ");System.out.println(sb); |
replace | 替换 | // start end stringint start = sb.indexOf("Android"); int end = start + "Android".length();sb.replace(start,end,"you!!!");System.out.println(sb); |
reverse | 反转 | sb.reverse(); |
总结
代理设计模式还不是很理解,加强学习,坚持!