1. 程式人生 > >個人學習設計模式之工廠模式

個人學習設計模式之工廠模式

簡單工廠模式:一個介面,多個實現類,一個工廠類,用來例項化抽象的介面

優點: 1、一個呼叫者想建立一個物件,只要知道其名稱就可以了。 2、擴充套件性高,如果想增加一個產品,只要擴充套件一個工廠類就可以。 3、遮蔽產品的具體實現,呼叫者只關心產品的介面。

缺點:每次增加一個產品時,都需要增加一個具體類和物件實現工廠,使得系統中類的個數成倍增加,在一定程度上增加了系統的複雜度,同時也增加了系統具體類的依賴。這並不是什麼好事。

注意事項:作為一種建立類模式,在任何需要生成複雜物件的地方,都可以使用工廠方法模式。有一點需要注意的地方就是複雜物件適合使用工廠模式,而簡單物件,特別是只需要通過 new 就可以完成建立的物件,無需使用工廠模式。如果使用工廠模式,就需要引入一個工廠類,會增加系統的複雜度。

實現:

首先建立介面

public interface People {

void makeThing();

}

實現類:

Student

public class Student implements People {

@Override

public void makeThing() {

System.out.println("上學");

}

}

Teacher

@Override

public void makeThing() {

System.out.println("教書");

}

}

Doctor

public class Doctor implements People{

@Override

public void makeThing() {

System.out.println("救人");

}

}

工廠類:

public class PeopleFactory {

public People getPerson(String person){

if(person==null||person.isEmpty()){

return null;

}

if(person.equals("student")){

return new Student();

}if(person.equals("teacher")){

return new Teacher();

}

if(person.equals("doctor")){

return new Doctor();

}

return null;

}

}

最後使用工廠:

public class FactoryMain {

public static void main(String[] args) {

PeopleFactory factory = new PeopleFactory();

People people1 =factory.getPerson("student");

people1.makeThing();

People people2 =factory.getPerson("teacher");

people2.makeThing();

People people3 =factory.getPerson("doctor");

people3.makeThing();

}

}

輸出:

上學

教書

救人