1. 程式人生 > >代理模式,簡單(靜態)工廠模式,單例模式,模板方法模式個人理解

代理模式,簡單(靜態)工廠模式,單例模式,模板方法模式個人理解

簡言:

java中總共有23種設計模式,每個模式的出現都是為了解決某一方面的問題,所以這23種設計模式有他們各自適用的地方(廢話有點多),而設計模式的產生主要是為了降低類與類之間的耦合度。下面我們就簡單的瞭解一下幾種設計模式及使用的地方。

1.單例模式:

我們都知道單例模式分為懶漢式、餓漢式以及登記式三種。
程式碼如下(以懶漢式):
public class 單例模式 {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
        a a1=a.getinstence();
        a1.gg();
}

}
class a{

private static a a;
private a(){    
}
public static a getinstence(){
    if(a==null){
        a=new a();
        System.out.println("haha");
    }
    return a;

}
public void gg(){
    System.out.println("hahsdsda");
}

}
特點:
如上程式碼所式可知:a類的構造方法為私有的(是不是有點奇怪啊,平時我們的構造方法為public的),這就是單例模式的特點,即只能存在一個物件。
單例物件是通過自己來建立物件的。
單例類必須給所有其他物件提供這一例項。
在什麼地方可以考慮使用:


1.當一個類沒有屬性。
2.該類作為工具類使用非常頻繁。

2.工廠模式:

工廠模式分為三種:簡單工廠模式、工廠方法模式、抽象工廠模式。而本文主要針對簡單工廠模式。
簡單工廠模式程式碼如下:

package 模式;

public class 工廠模式 {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub


    work w=factor.getwork("tv");

    w.working();

}}

class factor {
public static work getwork(String name){
if(name.equals(“tv”)){return new tv();}
else if(name.equals(“phone”)){return new phone();}
else{
return null;}
}

}

interface work{
void working();
}

class tv implements work{

@Override
public void working() {
    // TODO Auto-generated method stub
    System.out.println("tvok");
}

}
class phone implements work{

@Override
public void working() {
    // TODO Auto-generated method stub
    System.out.println("shoujiok");
}

}

該模式的目的是為了加強程式碼的健壯性。減少類與類之間的耦合度。
使用的場景:
1動態實現:好多需要實現同一個介面的物件,
2.如上面的程式碼所示一樣,如果我不使用工廠模式的話,就必須想使用某個類中的方法就必須new一個方法,假如某天這個類消失了,或則改名字了,那麼new物件的方法也就沒用了,還會報錯,所以就使用該模式,該模式通過傳遞某些值來new一個物件,如果該類不存在,或者是其他原因也不會導致錯誤的發生,總的來說就是降低了類與類之間的耦合度。

3.代理模式:

簡單的比喻就是一個人代表另一個人採取行動。在一些情況下,一個客戶不想或者不能夠直接引用一個物件,而代理物件可以在客戶端和目標物件之前起到中介的作用。
程式碼如下:
public class 代理模式 {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
    buy b=new people();
    daili d=new daili(b);
    d.shopp();
}

}
//個人購買
class people implements buy{
@Override
public void shopp() {
// TODO Auto-generated method stub
System.out.println(“buysomething”);
}
}
interface buy{
void shopp();
}
//代理
class daili implements buy{
private buy b;
public daili( buy b){
this.b=b;
}
@Override
public void shopp() {
// TODO Auto-generated method stub
b.shopp();
System.out.println(“thank”);
}
}

4.模板方法模式:

模板方法模式是所有模式中最為常見的幾個模式之一,他是基於繼承的程式碼複用的基本技術。
程式碼:public class 模板方法設計模式 {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
    aa a1=new c();
    a1.finall();
}

}
abstract class aa{
abstract boolean say();
void finall(){
if(say()){
System.out.println(“gg”);
}
else{
System.out.println(“hh”);
}
}
}
class b extends aa{

@Override
boolean say() {
    // TODO Auto-generated method stub
    return true;
}

}
class c extends aa{
@Override
boolean say() {
// TODO Auto-generated method stub
return false;
}
}
主要是用了多型和抽象類的方法實現,主要是為了一次性實現一個演算法的不變的部分,並將可變的行為留給子類來實現。