目的:
學(xué)習(xí)代理設(shè)計(jì)模式酣胀,深入了解接口回調(diào)的原理刁赦,能更好地理解于運(yùn)用,以及學(xué)習(xí)String字符串的相關(guān)知識(shí)點(diǎn)和相關(guān)函數(shù)方法闻镶。
知識(shí)點(diǎn):
1.創(chuàng)建方法時(shí)甚脉,對(duì)普通類、抽象類和接口的選擇:
實(shí)現(xiàn)一個(gè)方法; 三個(gè)選擇
- 抽象類 普通類 接口
- 1.是否需要添加成員變量: 需要:抽象類 普通類
不需要:接口 - 2.添加的方法是否必須要實(shí)現(xiàn): 必須:抽象類 接口
不需要:抽象類 普通類 - 3.我是需要提供模板還是提供通信的方式:
模板:抽象類
通信(數(shù)據(jù)傳遞):接口
2.String字符串的相關(guān)知識(shí):
- String
* 1.不可變的字符串 一旦創(chuàng)建 內(nèi)容不能改變 能被共享
* 2.可變的字符串
* StringBuffer
* StringBuilder
(1)== 與 equals 的區(qū)別:
- 對(duì)于字符串:
* == 比較的是兩個(gè)變量的地址
* equals()比較的是變量的內(nèi)容是否相同
對(duì)于非字符串變量铆农,兩者均比較變量的地址
String str0 = "cbd";
String str1 = "abc";
String str2 = "abc";
System.out.println(str1 == str0); //false
System.out.println(str0.equals(str1));//false
System.out.println(str1 == str2); // 重點(diǎn):true 字符串是不可變的 能被共享牺氨,所有地址相同
System.out.println(str1.equals(str2));//true
(2)有關(guān)不可變字符串的一些函數(shù)方法的調(diào)用及其運(yùn)行結(jié)果:
//使用構(gòu)造方法
//null 和 "" 的區(qū)別
String str3 = new String(); //創(chuàng)建了就不能改變 為"" 沒意義
byte[] name = {'a','b','c','d'};
String str4 = new String(name);
System.out.println(str4); //運(yùn)行結(jié)果:abcd
byte[] name2 = {97,98,99};
String str5 = new String(name2);
System.out.println(str5); //運(yùn)行結(jié)果:abc
//使用字節(jié)數(shù)組的一部分 創(chuàng)建一個(gè)字符串
String str6 = new String(name,0,3);
System.out.println(str6); //運(yùn)行結(jié)果:abc
// char[] hello = {'你','好','啊'};
// String h = new String(hello);
// System.out.println(h);
//
// // 字符串有哪些方法
// // 獲取字符串中的一個(gè)字符
// // charAt
// char c = h.charAt(0);
// System.out.println(c);
兩個(gè)字符串的比較 compareTo comepareToIgnoreCase(忽略大小寫)
兩個(gè)字符串的連接
判斷一個(gè)字符串是否包含另外一個(gè)字符串
// 可以知道大小關(guān)系 0:相同 >0:大于 <0:小于
int result = str4.compareToIgnoreCase(str5);
System.out.println(result); //運(yùn)行結(jié)果:1
// 兩個(gè)字符串的連接
// concat
// String nStr = str5.concat(h);
// System.out.println(nStr);
// 判斷一個(gè)字符串是否包含另外一個(gè)字符串
// contains
boolean r = "hello".contains("lle");
System.out.println(r); //運(yùn)行結(jié)果:false
boolean r1 = "hello".contains("he");
System.out.println(r1); //運(yùn)行結(jié)果:true
判斷是否以某個(gè)字符串結(jié)尾
String url = "http://www.baidu.com";
if (url.endsWith(".com")){
System.out.println("網(wǎng)址"); //運(yùn)行結(jié)果:網(wǎng)址
}
if (url.startsWith("http")){
System.out.println("http協(xié)議");//運(yùn)行結(jié)果:http協(xié)議
}
if (url.startsWith("www",7)){
System.out.println("萬(wàn)維網(wǎng)"); //運(yùn)行結(jié)果:萬(wàn)維網(wǎng)
}
兩個(gè)字符串進(jìn)行比較
// equals
if ("abc".equals("ABC")){
System.out.println("相同");
}else{
System.out.println("不相同"); //運(yùn)行結(jié)果:不相同
}
// 判斷一個(gè)子字符串在另外一個(gè)字符串里面的位置
// indexOf 不存在返回值為-1
String i1 = "hello Java";
int index = i1.indexOf("Java");
System.out.println(index); //運(yùn)行結(jié)果:6
// 獲取字符串的長(zhǎng)度
// length
獲取子字符串
// substring 從index到結(jié)尾
String sStr = i1.substring(6);
System.out.println(sStr);
// 從0開始 到5
String sStr2 = i1.substring(4,7);
System.out.println(sStr2);
// 將字符串轉(zhuǎn)化為字符數(shù)組
// toCharArray
// 將所有字符轉(zhuǎn)化為小寫
// toLowerCase / toUpperCase
// 將字符串前面和后面的空格字符刪除
// trim()
(3)有關(guān)可變字符串的一些函數(shù)方法的調(diào)用及其運(yùn)行結(jié)果:
數(shù)據(jù)的增刪改查
//2.可變字符串
//StringBuffer 線程安全 效率不高
//StringBuilder 線程不安全 效率更高
//insert delete append replace
StringBuilder sb = new StringBuilder();
//append 在末尾追加
sb.append("I ");
sb.append("LOVE ");
sb.append("?");
System.out.println(sb);
//insert 插入數(shù)據(jù)
sb.insert(1," also");
System.out.println(sb);
//replace 替換
//參數(shù): start ebd String
int start = sb.indexOf("?");
int end = start+"?".length();
sb.replace(start,end,"YOU");
System.out.println(sb);
// reverse 反轉(zhuǎn)
sb.reverse();
System.out.println(sb);
實(shí)際編程:
Read類、Chat類顿涣、Message類等 都需要設(shè)置字體顏色和大小
Setting類就完成這個(gè)功能 所以大家都去找Setting類實(shí)現(xiàn):
1.Read類和Chat類的定義:
public class Read {
private String text;
private String color;//默認(rèn)字體顏色
private int size; //默認(rèn)字體大小
public Read(String text){
this.text = text;
}
//模擬進(jìn)入設(shè)計(jì)界面
public void gotoSetting(){
//1.創(chuàng)建設(shè)計(jì)界面的對(duì)象
Setting setting = new Setting(this);
//2.推送到設(shè)計(jì)界面
setting.start();
}
//提供給外部一個(gè)方法 可以通過這個(gè)方法給我傳值
public void change(String color, int size){
System.out.println("設(shè)置前字體顏色:"+this.color+" 字體大胁帧:"+this.size);
this.color = color;
this.size = size;
System.out.println("設(shè)置后字體顏色:"+this.color+" 字體大小:"+this.size);
}
// @Override
// public void chance(String color, int size) {
// System.out.println("設(shè)置前字體顏色:"+this.color+" 字體大刑伪:"+this.size);
//
// this.color = color;
// this.size = size;
//
// System.out.println("設(shè)置后字體顏色:"+this.color+" 字體大芯椤:"+this.size);
// }
}
public class Chat {
private String text;
private String color;
private int size;
public Chat(String text){
this.text = text;
}
public void gotoSetting(){
Setting setting = new Setting(this);
setting.start2();
}
public void change(String color, int size){
System.out.println("設(shè)置前字體顏色:"+this.color+" 字體大小:"+this.size);
this.color = color;
this.size = size;
System.out.println("設(shè)置后字體顏色:"+this.color+" 字體大衅颜稀:"+this.size);
}
// @Override
// public void chance(String color, int size) {
// System.out.println("設(shè)置前字體顏色:"+this.color+" 字體大写趼ā:"+this.size);
//
// this.color = color;
// this.size = size;
//
// System.out.println("設(shè)置后字體顏色:"+this.color+" 字體大小:"+this.size);
// }
}
2.Setting類中
1.接收外部的對(duì)象:
Read read;
Chat chat;
//創(chuàng)建對(duì)象時(shí) 就需要告訴我 你是誰(shuí)
public Setting(Read read){
this.read = read;
}
public Setting(Chat chat){
this.chat = chat;
}
2.實(shí)現(xiàn)數(shù)據(jù)回調(diào):
//開始設(shè)置
public void start(){
System.out.println("開始設(shè)置");
System.out.println("揉阎。庄撮。。毙籽。洞斯。");
System.out.println("設(shè)置完畢 即將返回結(jié)果");
read.change("紅色",30);
}
public void start2(){
System.out.println("開始設(shè)置");
System.out.println("。。烙如。么抗。。");
System.out.println("設(shè)置完畢 即將返回結(jié)果");
chat.change("紅色",30);
}
代碼的結(jié)構(gòu)問題:
1.每添加一個(gè)對(duì)象使用Setting類亚铁,就必須添加一個(gè)這個(gè)類的一個(gè)對(duì)象和構(gòu)造方法
2.每一個(gè)類都有自己的接收方法 導(dǎo)致方法不統(tǒng)一
解決問題:
問題1:
使用多態(tài)來接受子類:
Object object;
public Setting(Object object){
this.object = object;
}
// Read read;
// Chat chat;
//
// //創(chuàng)建對(duì)象時(shí) 就需要告訴我 你是誰(shuí)
// public Setting(Read read){
// this.read = read;
// }
// public Setting(Chat chat){
// this.chat = chat;
// }
使用時(shí)再?gòu)?qiáng)制轉(zhuǎn)換為子類對(duì)象
問題2:
定義一個(gè)接口蝇刀,統(tǒng)一管理傳遞數(shù)據(jù)方式,并且能保證每個(gè)使用Setting的類都必須實(shí)現(xiàn)這個(gè)方法
定義內(nèi)部接口并創(chuàng)建對(duì)象徘溢,傳遞參數(shù)
/**
* 設(shè)計(jì)界面 設(shè)文本字體大小和顏色
*/
public class Setting {
/**
* 記錄為誰(shuí)設(shè)置字體顏色和大小
* 記錄下我做完事情后 將數(shù)據(jù)返回給誰(shuí)
*/
FontSettingInterface fontSettingInterface;
public Setting(FontSettingInterface fontSettingInterface){
this.fontSettingInterface = fontSettingInterface;
}
// Read read;
// Chat chat;
//
// //創(chuàng)建對(duì)象時(shí) 就需要告訴我 你是誰(shuí)
// public Setting(Read read){
// this.read = read;
// }
// public Setting(Chat chat){
// this.chat = chat;
// }
interface FontSettingInterface{
void chance(String color, int size);
}
public void start(){
System.out.println("開始設(shè)置");
System.out.println("吞琐。。然爆。站粟。。");
System.out.println("設(shè)置完畢 即將返回結(jié)果");
fontSettingInterface.chance("紅色",30);
}
// //開始設(shè)置
// public void start(){
// System.out.println("開始設(shè)置");
// System.out.println("施蜜。卒蘸。。翻默。缸沃。");
// System.out.println("設(shè)置完畢 即將返回結(jié)果");
//
// chat.change("紅色",30);
//
// }
}
實(shí)現(xiàn)這個(gè)Setting的步驟:
3.運(yùn)用與結(jié)果:
/**
* 接口實(shí)現(xiàn)回調(diào) 代理設(shè)計(jì)模式
*/
public class Myclass {
public static void main(String[] args){
Read read = new Read("text");
read.gotoSetting();
System.out.println();
Chat chat = new Chat("text2");
chat.gotoSetting();
}
}
開始設(shè)置
。修械。趾牧。。肯污。
設(shè)置完畢 即將返回結(jié)果
設(shè)置前字體顏色:null 字體大星痰ァ:0
設(shè)置后字體顏色:紅色 字體大小:30
開始設(shè)置
蹦渣。哄芜。。柬唯。认臊。
設(shè)置完畢 即將返回結(jié)果
設(shè)置前字體顏色:null 字體大小:0
設(shè)置后字體顏色:紅色 字體大谐荨:30
心得:
今天學(xué)習(xí)任務(wù)很輕松失晴,早上的知識(shí)是對(duì)昨天的理解與加深,下午則是了解字符串的相關(guān)函數(shù)拘央,最后結(jié)束時(shí)留下一個(gè)小任務(wù)倒是充滿了未知數(shù)哦涂屁。