2019-08-13 Day13 代理設(shè)計(jì)模式與系統(tǒng)方法(String)


目的

學(xué)習(xí)代理設(shè)計(jì)模式,實(shí)現(xiàn)文本界面與設(shè)計(jì)界面的信息交換晤斩,同時(shí)實(shí)現(xiàn)自己的功能焕檬;學(xué)習(xí)關(guān)于系統(tǒng)方法String相關(guān),理解其相關(guān)用法澳泵,實(shí)現(xiàn)將其運(yùn)用進(jìn)入代碼


代理設(shè)計(jì)模式

概念

代理(Proxy)是一種設(shè)計(jì)模式,提供了對(duì)目標(biāo)對(duì)象另外的訪問方式;即通過代理對(duì)象訪問目標(biāo)對(duì)象.這樣做的好處是:可以在目標(biāo)對(duì)象實(shí)現(xiàn)的基礎(chǔ)上,增強(qiáng)額外的功能操作,即擴(kuò)展目標(biāo)對(duì)象的功能
這里使用到編程中的一個(gè)思想:不要隨意去修改別人已經(jīng)寫好的代碼或者方法,如果需改修改,可以通過代理的方式來擴(kuò)展該方法
舉個(gè)例子來說明代理的作用:假設(shè)我們想邀請(qǐng)一位明星,那么并不是直接連接明星,而是聯(lián)系明星的經(jīng)紀(jì)人,來達(dá)到同樣的目的.明星就是一個(gè)目標(biāo)對(duì)象,他只要負(fù)責(zé)活動(dòng)中的節(jié)目,而其他瑣碎的事情就交給他的代理人(經(jīng)紀(jì)人)來解決.這就是代理思想在現(xiàn)實(shí)中的一個(gè)例子

實(shí)例

對(duì)Read類、Chat類兼呵、Message類設(shè)置字體顏色和大小兔辅,而使用Setting類來完成這個(gè)功能,所以大家都去找Setting類來實(shí)現(xiàn)設(shè)置字體顏色和大小

問題:

1.每添加一個(gè)對(duì)象使用Setting類击喂,就必須添加一個(gè)這個(gè)類的一個(gè)對(duì)象和對(duì)應(yīng)的構(gòu)造方法

    Read r1;
    Chat c1;

    //創(chuàng)建對(duì)象的時(shí)候 就需要告訴我 你是誰
    public setting(Read r1){
        this.r1 = r1;
    }

    public setting(Chat c1){
        this.c1 = c1;
    }

2.每個(gè)類有其對(duì)應(yīng)的接收方法维苔,所以導(dǎo)致方法不統(tǒng)一

    //提供給外部一個(gè)方法 可以通過這個(gè)方法給我傳值
    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);
    }
    //在Chat頁面也需要提供一個(gè)方法接收外部傳遞的參數(shù)
    public void doChange(String color, int size){
        System.out.println("改變后的顏色:"+color+" 改變后的大小:"+size);
    }
//在Message頁面也需要提供一個(gè)方法接收外部傳遞的參數(shù)
    public void againChange(String color, int size){
        System.out.println("改變后的顏色:"+color+" 改變后的大小:"+size);
    }

解決辦法

1.使用多臺(tái)來接收子類

    Object obj1;

    public Setting(Object obj1){
        this.obj1 = obj1;
    }

具體使用的時(shí)候還是要強(qiáng)制轉(zhuǎn)化為子類對(duì)象 ,每個(gè)?子類都有自己的接收方法

if(obj instanceof Chat){
   Chat c1 = (Chat) obj;
   if(c1 != null){
      c1.doChange("紅色",20);
   }
}

if(obj instanceof Message){
   Message m1 = (Message) obj;
   if(m1 != null){
      m1.againChange("紅色",20);
   }
}

if(obj instanceof Read){
   Read r1 = (Read) obj;
   if(r1 != null){
      r1.change("紅色",20);
   }
}

接口懂昂、抽象類和普通類的選擇

  • 1.是否需要添加成員變量 需要就只有兩個(gè)選擇——抽象類&普通類 不需要就為接口
  • 2.添加的方法是不是必須要實(shí)現(xiàn) 必須就為抽象類&接口 否則為抽象類&普通類
  • 3.是需要提供模板還是通信方法 模板就是抽象類 通信方式就是接口(數(shù)據(jù)傳遞)

2.定義一個(gè)接口介时,統(tǒng)一管理傳遞數(shù)據(jù)的方式,并且能保證每個(gè)使用Setting的類都必須實(shí)現(xiàn)這個(gè)方法
定義Setting內(nèi)部接口

    //使用接口定義一套方法 強(qiáng)制使用者來實(shí)現(xiàn)這個(gè)方法
    //能保證我需要傳值的時(shí)候 就能找到這個(gè)方法
    public interface FontSettingInterface{
        //自己規(guī)定的方法
        void change(String color, int size);
    }

創(chuàng)建對(duì)象

    //記錄為誰設(shè)置顏色和大小
    //記錄下我做完事情之后 將數(shù)據(jù)返回給誰
    //使用多臺(tái)
    FontSettingInterface obj;

    public setting(FontSettingInterface obj){
        this.obj = obj;
    }

傳遞數(shù)據(jù)或者參數(shù)

    public void startSetting(){
        System.out.println("開始設(shè)置");
        System.out.println("······");
        System.out.println("設(shè)置完畢 即將返回結(jié)果");

        obj.change("黑色",20);

使用Setting這個(gè)類

public class Read implements setting.FontSettingInterface {
    private String text;
    private String color;//默認(rèn)的顏色
    private int size;//默認(rèn)的字體大小

    public Read(String text){
        this.text = text;
    }

    //模擬進(jìn)入設(shè)置頁面
    public void goToSetting(){
        //1.創(chuàng)建設(shè)置頁面的對(duì)象
        setting setting = new setting(this);

        //2.推送到設(shè)置頁面
        setting.startSetting();
    }

    //提供給外部一個(gè)方法 可以通過這個(gè)方法給我傳值
    @Override
    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 Chat implements setting.FontSettingInterface {
    //模擬進(jìn)入設(shè)置頁面
    public void goToSetting(){
        //1.創(chuàng)建設(shè)置頁面的對(duì)象
        setting setting = new setting(this);

        //2.推送到設(shè)置頁面
        setting.startSetting();
    }

    //在Chat頁面也需要提供一個(gè)方法接收外部傳遞的參數(shù)
    @Override
    public void change(String color, int size){
        System.out.println("改變后的顏色:"+color+" 改變后的大小:"+size);
    }
}

測(cè)試方法

public class MyClass {
    public static  void main(String[] args){
        Read read = new Read("lllllllll");
        read.goToSetting();
        Chatting chatting = new Chatting(" ");
        chatting.goToSetting();
    }
}

系統(tǒng)方法String

String類具有各種方法來初始化字符串

String str1 = "abc";

String str3 = new String();//沒意義

//使用字節(jié)數(shù)組 創(chuàng)建一個(gè)字符串
byte[] name = {'a','b','c'};
String str4 = new String(name);

byte[] name2 = {97,98,99};
String str5 = new String(name2);

//使用字節(jié)數(shù)組的一部分 創(chuàng)建一個(gè)字符串
String str6 = new String(name,0,2);

char[] hello = {'你','好','啊'};
String h = new String(hello);

字符串有哪些方法

獲取字符串中的一個(gè)字符(charAt)

char c = h.charAt(0);
System.out.println(c);

兩個(gè)字符串的比較 (compareTo)
可以知道大小關(guān)系,結(jié)果為0:相同 >0:大于 <0:小于

int result = str4.compareTo(str5);
System.out.println(result);

字符串的連接(concat)

String nstr = str5.concat(h);
System.out.println(nstr);

判斷一個(gè)字符串是否包含另一個(gè)字符串(contains)

boolean r = "hello".contains("lle");
System.out.println(r);

判斷是否以某個(gè)字符串開頭凌彬,某個(gè)字符串結(jié)尾

 String url = "http://www.baidu.com";
        if(url.endsWith(".com")){
            System.out.println("網(wǎng)站");
        }
        if(url.startsWith("http")){
            System.out.println("http協(xié)議");
        }
        if(url.startsWith("www",7)){
            System.out.println("萬維網(wǎng)");
        }

兩個(gè)字符串進(jìn)行比較 equals

 if("abc".equals("ABC")){
            System.out.println("相同");
        }else{
            System.out.println("不相同");
        }

判斷一個(gè)子字符串在另一個(gè)字符串里面的位置 indexOf
不存在返回值為-1

String i1 = "hello Java";
int index = i1.indexOf("Java");
System.out.println(index);

獲取子字符串 substring 從index到結(jié)尾

String sStr = i1.substring(6);
System.out.println(sStr);

從字符串轉(zhuǎn)化為字符數(shù)組 toCharArray
將所有字符轉(zhuǎn)化為小/大寫 toLowerCase / toUpperCase

可變字符串

有兩種可變字符串沸柔,原理是不創(chuàng)建新對(duì)象,直接在原對(duì)象上進(jìn)行更改:
1.StringBuffer 線程安全 效率不高
2.StringBuilder 線程不安全的 效率高

        // 創(chuàng)建的同時(shí)先準(zhǔn)備好6個(gè)字符的空間
        StringBuilder sb = new StringBuilder(6);

append 在末尾追加

        sb.append("I");
        sb.append(" Love");
        sb.append(" Android");
        System.out.println(sb);

insert 插入數(shù)據(jù)

        sb.insert(2,"also ");
        System.out.println(sb);

replace 替換
參數(shù)分別為start end string

        int start = sb.indexOf("Android");
        int end = start + "Android".length();
        sb.replace(start, end, "you");
        System.out.println(sb);

reverse 反轉(zhuǎn)

        sb.reverse();

心得體會(huì)

今天早上的內(nèi)容有一些困難铲敛,還需要對(duì)其多復(fù)習(xí)多理解褐澎;而今天下午的知識(shí)更偏向書本,需要多加記憶

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末伐蒋,一起剝皮案震驚了整個(gè)濱河市工三,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌先鱼,老刑警劉巖俭正,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異焙畔,居然都是意外死亡掸读,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門闹蒜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來寺枉,“玉大人,你說我怎么就攤上這事绷落±焉粒” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵砌烁,是天一觀的道長筐喳。 經(jīng)常有香客問我催式,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮尽超,結(jié)果婚禮上蜓席,老公的妹妹穿的比我還像新娘。我一直安慰自己字柠,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著萌业,像睡著了一般。 火紅的嫁衣襯著肌膚如雪奸柬。 梳的紋絲不亂的頭發(fā)上生年,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音廓奕,去河邊找鬼抱婉。 笑死,一個(gè)胖子當(dāng)著我的面吹牛桌粉,可吹牛的內(nèi)容都是我干的蒸绩。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼番甩,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼侵贵!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起缘薛,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤窍育,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后宴胧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體漱抓,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年恕齐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了乞娄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡显歧,死狀恐怖仪或,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情士骤,我是刑警寧澤范删,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站拷肌,受9級(jí)特大地震影響到旦,放射性物質(zhì)發(fā)生泄漏旨巷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一添忘、第九天 我趴在偏房一處隱蔽的房頂上張望采呐。 院中可真熱鬧,春花似錦搁骑、人聲如沸斧吐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽会通。三九已至,卻和暖如春娄周,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背沪停。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來泰國打工煤辨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人木张。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓众辨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親舷礼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鹃彻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說閱讀 10,925評(píng)論 6 13
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,092評(píng)論 1 32
  • 目的: 學(xué)習(xí)代理設(shè)計(jì)模式蛛株,深入了解接口回調(diào)的原理,能更好地理解于運(yùn)用育拨,以及學(xué)習(xí)String字符串的相關(guān)知識(shí)點(diǎn)和相關(guān)...
    我也不知道_2c95閱讀 319評(píng)論 0 0
  • 一谨履、基礎(chǔ)知識(shí):1、JVM熬丧、JRE和JDK的區(qū)別:JVM(Java Virtual Machine):java虛擬機(jī)...
    殺小賊閱讀 2,369評(píng)論 0 4
  • 陪伴笋粟,一個(gè)看似簡(jiǎn)單平常的詞匯。 從古至今析蝴,無數(shù)文人雅士對(duì)它都有著不同的解讀害捕。它是白居易口中“天長地久有時(shí)盡,此恨綿...
    腸粉淋芝麻醬閱讀 356評(píng)論 0 1