常用的設計模式及java代碼描述

來源:互聯網
上載者:User

標籤:構造   his   常用   測試   detail   動態   易拓   java反射   color   

http://blog.csdn.net/haoxingfeng/article/details/9191619

 

1>代理模式    

 http://www.cnblogs.com/chinajava/p/5880870.html

 代理模式分靜態代理和動態代理

 靜態代理:(需要一個介面,一個委託類實現介面,一個代理類實現介面,) 代理模式就是提供一個代理對象,其可以實現委託類的部分功能,而且也可以拓展自己的功能

 例如(委託類)售票廳可以售票、改簽、退票;(代理類)黃牛售票只可以售票,要辦理改簽或者退票的業務必須去售票廳

//介面package com.wyx.proxyTest;public interface ISubject {    public void request();}//委託類package com.wyx.proxyTest;public class SubjectImpl implements ISubject {    @Override    public void request() {        System.out.println("this is real subject");    }        public void otherFun(){        }  }     //代理類package com.wyx.proxyTest;/* * 這個是代理類,它只有SubjectImpl中的部分功能 */public class SubjectProxy implements ISubject{    private ISubject sub = null;        public SubjectProxy(ISubject sub){        this.sub = sub;    }    @Override    public void request() {        System.out.println("This is Proxy");        sub.request();    }}   //代理類測試package com.wyx.proxyTest;public class MainTest {    public static void main(String[] args){                SubjectImpl sub = new SubjectImpl();                SubjectProxy proxy = new SubjectProxy(sub);        proxy.request();    }}


動態代理:

 

2>裝飾模式

 

3>策略模式(這個模式是行為的抽象,蔣其他幾個類有相似的方法,用通用的抽象的方法提取出來,更容易拓展)

  

4>單例模式(使得記憶體中只存在一個這樣的對象,有餓漢式、飽漢式)

public class SingleMain{
  //主方法
  public static void main(String[] args){
  
  }
}

//餓漢式
class SingletonDome1{
  //私人的對象
  private static final SingletonDome1 sgd1 = new SingletonDome1();  
  ///私人的構造方法
  private SingletonDome1(){}
  //
  public static SingletonDome1 getSgd1(){
    return sgd1;
  }
}
//飽漢式
class SingletonDome2{
  //私人的對象
  private static SingletonDome2 sgd2 = new SingletonDme2();
  //私人的構造方法
  private SingletonDome2(){}
  //
  public static SingletonDome2 getSgd2(){
    if(sgd2 == null){
      sgd2 = new SingletonDome2();
    }
    return sgd2;
  }
}

 

5>原廠模式(是執行個體化對象的方法模式,即:用Factory 方法代替New操作的一種模式,例:以下是個簡單的例子)

/*
*靜態原廠模式
*/
//介面
public interface Alphabet{
  public void alphabetFun(Object... params);}
//介面的實現A類
public class A implements Alphabet{
  @Override
  public void alphabetFun(Object... params){
    System.out.println(params[0]+" "+"This is A");
  }
}
//介面的實現B類
public class B implements Alphabet{
  @Override
  public void alphabetFun(Object... params){
    System.out.println(params[0]+" "+"This is A");
  }
}
//工廠類 
public class FactoryCls{
  public static Alphabet factoryFun(String abc){
    Alphabet tempObj;
    //利用了java反射的機制
    Class cls = null;
    try{
      cls = Class.forName("類路徑");
    }catch(Expection e){
      e.printStackTrace();
    }    

    /*
    if(abc=="A"){
      tempObj = new A();
    }else if(abc=="B"){
      tempObj = new B();
    }
    */
    return tempObj;
  }
}

 

常用的設計模式及java代碼描述

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.