简单工厂
例如:
Calendar.getInstance()
java.text.NumberFormat.getInstance()
java.util.ResourceBundle.getBundle()
public class Factory{
public static Product createProduct(int type){
if(type == 1){
return new ProductA();
}else if(type == 2) {
return new ProductB();
}else{
return null;
}
}
}
public interface Product {
}
public class ProductA implements Product{
}
public class ProductB implements Product{
}
新增类还是需要更新Factory类,不符合开闭原则,采用工厂方法模式将类的创建延迟要子类。
工厂方法
例如:
java.net.URLStreamHandlerFactory
javax.xml.bind.JAXBContext.createMarshaller
public abstract class Product{
public abstract Product createProduct();
}
public class ProductA extends Product{
@Override
public Product createProduct{
return new ProductA();
}
}
public class ProductB extends Product{
@Override
public Product createProduct{
return new ProductB();
}
}
工厂方法模式将具体产品和创建者解耦,符合单一职责原则,符合开闭原则