工厂方法模式:提供了一组工厂类,每个产品都有相对应的工厂。
示例:
// 产品接口类
public interface Product{
// 输出产品类型
void printType();
}
// 具体产品 西装类
public class Suit implements Product{
public void printType(){
System.out.println("西装");
}
}
// 具体产品 T恤类
public class TShirt implements Product{
public void printType(){
System.out.println("T恤");
}
}
// 工厂接口类
public interface Factory{
public Operation getOperation();
}
// T恤 工厂类
public class TShirtFactory implements Factory{
public Product getProduct(){
return new TShirt();
}
}
// 西装 工厂类
public class SuitFactory implements Factory{
public Product getProduct(){
return new Suit();
}
}
public class Test{
public static void main(String[] args){
Factory factory1 = new SuitFactory();// 西装工厂
Factory factory2 = new TShirtFactory(); // T恤工厂
Product product1 = factory1.getProduct();
product1.printType(); // 西装
Product product2 = factory2.getProduct();
product2.printType(); // T 恤
}
}
优点:遵循了 开闭原则
和 单一职责原则
(当然,同样也遵循了简单工厂模式遵循的 依赖倒置原则
)。
缺点:每新增一个操作(如乘法),则需添加操作类和相对应的操作工厂类,导致文件繁多,管理麻烦。