- 作用:
實(shí)例化實(shí)現(xiàn)同一接口的多個(gè)類 - 優(yōu)點(diǎn):
1滋恬、一個(gè)調(diào)用者想創(chuàng)建一個(gè)對(duì)象匀哄,只要知道其名稱就可以了 2秦效、擴(kuò)展性高,如果想增加一個(gè)產(chǎn)品涎嚼,只要擴(kuò)展一個(gè)工廠類就可以 3阱州、屏蔽產(chǎn)品的具體實(shí)現(xiàn),調(diào)用者只關(guān)心產(chǎn)品的接口
簡單工廠:
public interface Product {
void make();
}
public class ProductA implements Product {
@Override
public void make() {
System.out.println("ProductA has made");
}
}
public class ProductB implements Product {
@Override
public void make() {
System.out.println("ProductB has made");
}
}
public class SimpleFactory {
public static Product createProduct(String type) {
if (type.equals("A")) {
return new ProductA();
} else if (type.equals("B")) {
return new ProductB();
} else {
return null;
}
}
}
public class SimpleFactoryTest {
public static void main(String[] args) {
Product product = SimpleFactory.createProduct("A");
product.make();
}
}
工廠方法(不修改已有類的前提下法梯,通過增加新的工廠類實(shí)現(xiàn)擴(kuò)展):
public interface MethodFactory {
Product createProduct();
}
public class ProductAFactory implements MethodFactory {
@Override
public Product createProduct() {
return new ProductA();
}
}
public class ProductBFactory implements MethodFactory {
@Override
public Product createProduct() {
return new ProductB();
}
}
public class MethodFactoryTest {
public static void main(String[] args) {
MethodFactory factory = new ProductAFactory();
Product product = factory.createProduct();
product.make();
}
}