個人學習設計模式之工廠模式
簡單工廠模式:一個介面,多個實現類,一個工廠類,用來例項化抽象的介面
優點: 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();
}
}
輸出:
上學
教書
救人