接口实现回调 代理设计模式 数组
目的
1.掌握使用接口实现回调的方法
2.了解数组的各种方法,以便在编写程序过程中可以灵活使用
技术
1.创建一个简易的阅读界面,跳转到设置界面设置字体颜色及大小后返回给界面
2.用接口实现回调方式
3.不可变数组String中常用方法
4.可变数组StringBuilder中常用方法
技术实现
1.普通回调方式
- 阅读界面
/**
* 阅读界面 展示显示的文本
*/
public class Read {
private String text;
private String color; //默认的颜色
private int size; //默认的字体大小
public Read(String text){
this.text = text;
}
//模拟进入设置页面
public void goToSetting(){
//1.创建设置页面的对象
Setting setting = new Setting(this);
//2.推送到这是页面
setting.startSetting();
}
//提供给外部一个方法 可以通过这个方法给我传值
public void change(String color,int size){
System.out.println("改变前的颜色:"+this.color+" 大小:"+this.size);
this.color = color;
this.size = size;
System.out.println("改变后的颜色:"+this.color+" 大小:"+this.size);
}
}
- 设置界面
**
* 设置页面 设置字体大小和颜色
*/
public class Setting {
//记录为谁设置颜色和大小 记录下做完事情之后 将数据返回给谁
Read r1;
//创建对象的时候 就需要告诉我 你是谁
public Setting(Read r1){
this.r1 = r1;
}
//开始设置
public void startSetting(){
System.out.println("开始设置");
System.out.println(".........");
System.out.println("设置完毕 即将返回结果");
//如果有可以访问的属性 直接通过属性给值
//比较少用 对象没办法第一时间知道自己需要的值有了
// r1.color = "红色";
// r1.size = 18;
//通过方法来回调
r1.change("黑色",29);
}
}
- 主函数
public static void main(String [] args){
Read read = new Read("text");
read.goToSetting();
}
-
运行结果
2.接口实现回调
- 设置界面
public class Setting {
// Read r1;
// Chat c1;
// public Setting(Read r1){
// this.r1 = r1;
// }
// public Setting(Chat c1){
// this.c1 = c1;
// }
// Object obj;
FontSettinginterface obj;
public Setting(FontSettinginterface obj){
this.obj = obj;
}
interface FontSettinginterface{
void change(String color,int size);
}
public void startSetting(){
System.out.println("开始设置");
System.out.println("........");
System.out.println("设置完毕");
// if(r1 != null){
// r1.change("黑色",23);
// }
// if(c1 != null){
// c1.change1("白色",25);
// }
// if(obj instanceof Read){
// Read r1 = (Read)obj;
// r1.change("黑色",23);
// }
// if(obj instanceof Chat){
// Chat c1 = (Chat)obj;
// c1.change1("白色",25);
// }
obj.change("黑色",29);
}
}
- 阅读界面
public class Read implements Setting.FontSettinginterface {
private String text;
private String color;
private int size;
public Read(String text) {
this.text = text;
}
public void goToSetting() {
Setting setting = new Setting(this);
setting.startSetting();
}
public void change(String color, int size) {
this.color = color;
this.size = size;
System.out.println("颜色:" + color + " 大小:" + size);
}
}
- 聊天界面
public class Chat implements Setting.FontSettinginterface {
private String color;
private int size;
public void goToSetting(){
Setting setting = new Setting(this);
setting.startSetting();
}
public void change1(String color,int size){
this.color = color;
this.size = size;
System.out.println("颜色:"+color+" 大小:"+size);
}
@Override
public void change(String color, int size) {
this.color = color;
this.size = size;
System.out.println("颜色:" + color + " 大小:" + size);
}
}
- 主函数
public static void main(String[] args){
Read read = new Read("df");
read.goToSetting();
Chat chat = new Chat();
chat.goToSetting();
}
-
运行结果
- 不可变数组String中常用方法
String str1 = "abc";
String str2 = "abc";
System.out.println(str1 == str2);
System.out.println(str1.equals(str2));
//使用构造方法
//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(2);
System.out.println(c);
// 两个字符串的比较 compareTo
// 可以知道大小关系 0:相同 >0:大于 <0:小于
int result = str4.compareTo(str5);
System.out.println(result);
// 两个字符串的连接
// concat
String nStr = str5.concat(h);
System.out.println(nStr);
// 判断一个字符串是否包含另外一个字符串
// contains
boolean r = "hello".contains("ll");
System.out.println(r);
String url = "http://www.baidu.com";
if (url.endsWith(".com")){
System.out.println("网址");
}
if (url.startsWith("http")){
System.out.println("http协议");
}
if (url.startsWith("www",7)){
System.out.println("万维网");
}
// 两个字符串进行比较
// equals
if ("abc".equals("ABC")){
System.out.println("相同");
}else {
System.out.println("不相同");
}
System.out.println(str4.hashCode());
// 判断一个子字符串在另外一个字符串里面的位置
// indexOf 不存在返回值为-1
String i1 = "hello Java";
int index = i1.indexOf("Java");
System.out.println(index);
//获取字符串的长度
//length
// 获取子字符串
// substring 从index到结尾
String sStr = i1.substring(6);
System.out.println(sStr);
// 从0 到 5
String sStr1 = i1.substring(0,5);
System.out.println(sStr1);
// 将字符串转化为字符数组
// toCharArray
// 将所有字符转化为小写/ 大写
// toLowerCase/ toUpperCase
// 将字符串前面和后面的空格字符删除
// trim();
- 可变数组StringBuilder中的常用方法
// 可变字符串
// StringBuffer 线程安全 效率不高
// StringBuilder 线程不安全的 效率更高
// insert append delete replace
// 创建的同时先准备好6个字符的空间
StringBuilder sb = new StringBuilder(6);
// append 在末尾追加一个字符串;
sb.append("I");
sb.append(" Love");
sb.append(" Android");
System.out.println(sb);
sb.insert(2,"also ");
System.out.println(sb);
// replace 替换
int start = sb.indexOf("Android");
int end = start + "Android".length();
sb.replace(start,end,"You!!!");
System.out.println(sb);
// reverse 反转
// sb.reverse();
// System.out.println(sb);
int s1 = sb.indexOf("also");
int s2 = s1+"alse".length();
sb.delete(s1,s2);
System.out.println(sb);
}
}
心得
通过今天的学习,我对接口和数组有了更深的理解,昨天我对于接口还是懵的状态,今天总算是弄明白了一些,虽说还不是特别清晰,但已经能够简单运用。每天进步一点点,也是很开心的事。