一 原廠模式
原廠模式從字面可以理解,就是我們需要某個執行個體,不需要一個個去new出來,而是通過某個工廠批量產生,這樣設計的好處就是如果某個類被替換,那麼在用戶端我們不需要改動,只要在工場類中去修改,降低了類之間的依賴性。
代碼執行個體:
package com.example.springboot_test.test;/** * com.xinguangnet.tuchao.merchant.manage * * @Author : Wukn * @Date : 2018/2/5 *//** * 工廠設計模式 * * * */interface Persion { //定義介面 public void eat();//定義一個方法}class Aa implements Persion { @Override public void eat() { System.out.println("Aa----------"); }}class Bb implements Persion { @Override public void eat() { System.out.println("Bb-----------"); }}class FactoryTest { public static Persion FactoryClass(String str) { Persion persion = null; if(str.equals("Aa")) { persion = new Aa(); } if(str.equals( "Bb" )){ persion = new Bb(); } return persion; } /** * 注意在判斷字串時最好是將字串寫在前面,這樣可以防止null 指標異常 *if("Aa".equals(str)) { persion = new Aa(); } if("Bb".equals(str)){ persion = new Bb(); } * */ static class TestClass { public static void main(String[] args) { Persion persion = FactoryTest.FactoryClass("Aa"); persion.eat(); }}}
二 代理模式
package com.example.springboot_test.test;/** * com.xinguangnet.tuchao.merchant.manage * * @Author : Wukn * @Date : 2018/2/5 * * * 代理設計模式 *//** *定義一個租房介面這個介面房東和中介都去實現 為什麼要定義一個公用的介面呢,我的理解是,不管是房東或者中介要想把房子租出去就必須要發一個租房廣告 */public interface ProxyTest { public void sent();}class Fangdong implements ProxyTest {//對於房東而言他的目的就是只要把房子租出去,誰租的房子他都不關心 @Override public void sent() { System.out.println("房東直租。。。。。。"); }}class ZhongJie implements ProxyTest {//對於中介而言,他的目的就是將房東的房子租出去,中介會定租金和租給誰 private Fangdong fangdong; public ZhongJie(Fangdong fangdong) { this.fangdong = fangdong; } public void money(){ System.out.println("交錢"); } public void stay() { System.out.println("入住"); } @Override public void sent() { money(); fangdong.sent();//這個是真正的租房資訊,被中介代理的內容 sent(); }}class TestSent { public static void main(String[] args) { /** * //租房子的人找到中介,他根本不知道這個房子是不是直租,他只是找到中介,中介把房東的房子租給了需要租的人 */ ProxyTest proxyTest = new ZhongJie(new Fangdong()); proxyTest.sent();//租房完成 }} *
/** * 在整個租房的開始到完成中需要思考每個人物完成了哪些事情、 * 房東: * 房東實現了公用的介面 * 房東將租房子的廣告資訊發不出來 * * 中介: * 中介實現了公用的介面 * 中介代理了房東的租房廣告資訊 * 中介豐富了租房的過程 * * 客戶: * 找到中介,交錢租房 * * * * 在上面的過程中,我的理解是,所謂代理設計,其實就是兩個目的相同的類公用區實現一個公用的業務介面,這兩個類一個是原始類,一個是 * 代理類,代理類中其實執行個體化了原始類,這樣在代理類中可以將代理類和原始類公用的方法進行增強,有前增強,後增強等, * 對於用戶端而言,只需要關注代理類的實現方式而不需要關注具體的業務組成,降低了模組之間的耦合度。有利於適應更多的業務情境。 * *
三 適配器模式
package com.example.springboot_test.test;/** * com.xinguangnet.tuchao.merchant.manage * * @Author : Wukn * @Date : 2018/2/5 *//** * 適配器模式 */interface AdaperTest { /** * 對於一個介面而言,如果某個類實現了這個介面,就必須實現這個介面裡面的所以方法, * 但是在具體的業務情境,有的時候我們不需要實現介面裡面的所以方法,我們可能只需要幾個方法, * 但是只是一個空的方法體,然後再用一個普通類去繼承這個介面,具體的代碼就可以寫在這個普通類裡面的方法體中, * 這種設計思想就是設配器模式。 */ public void a1(); public void a2(); public String b1(); public Integer b2();}abstract class Aaa implements AdaperTest { /** * 空的方法體 */ @Override public void a1() { } @Override public String b1() { return null; }}class Shoe extends Aaa { @Override public void a2() { System.out.println("ddd"); } @Override public Integer b2() { Integer a = 123; return a; }}/** * * 在以上的程式中其實可以有一個疑問就是 * 為什麼抽象類別可以不用全部實現介面的方法。 * * * 我的理解是既然是抽象類別,如果必須要實現介面的全部方法。那之前對於介面的規範是沒有意義的, * 抽象類別中定義了抽象類別如果沒有被繼承那麼這個抽象類別的創造就沒有意義,試想,如果抽象類別全部實現了介面的方法, * 所有的操作都在抽象類別中完成,就不需要被其他類繼承了,那麼就和之前定的規範矛盾。 * * * * * */
抽象類別與介面之間的關係