概念:
工厂模式是一种创建对象的设计模式,它将对象的创建和使用分离,提高了代码的可维护性和可扩展性。也就是创建一个专门负责创建对象的工厂类,将对象的创建过程进行封装。
案例:
能有工厂才生产产品A和产品B
简单工厂
代码展示:
//抽象产品接口
public interface Product {void use();
}
//具体产品类
public class ProductA implements Product{@Overridepublic void use() {System.out.println("产品A的使用");}
}
//具体产品类
public class ProductB implements Product{@Overridepublic void use() {System.out.println("产品B的使用");}
}
//定义工厂类,来生产产品
public class Factory {public static Product createProduct(String type) {if("A".equals(type)) {return new ProductA();}else if("B".equals(type)) {return new ProductB();}else return null;}
}
public class Test {public static void main(String[] args) {Product a = Factory.createProduct("A");Product b = Factory.createProduct("B");a.use();b.use();}
}
代码解释:
1、定义了一个工厂类来负责创建产品对象。
2、但当产品类数量过多时,工厂类会过于复杂。
工厂方法模式
代码展示:
//抽象产品接口
public interface Product {void use();
}
//具体产品类
public class ProductA implements Product{@Overridepublic void use() {System.out.println("产品A的使用");}
}
//具体产品类
public class ProductB implements Product{@Overridepublic void use() {System.out.println("产品B的使用");}
}
//定义抽象工厂接口
public interface Factory {Product creatProduct();
}
//定义具体工厂,生产产品A
public class ProductAFactory implements Factory{@Overridepublic Product creatProduct() {return new ProductA();}
}
//定义具体工厂,生产产品B
public class ProductBFactory implements Factory{@Overridepublic Product creatProduct() {return new ProductB();}
}
//测试类
public class Test {public static void main(String[] args) {Factory factoryA = new ProductAFactory();Factory factoryB = new ProductBFactory();Product productA = factoryA.creatProduct();Product productB = factoryB.creatProduct();productA.use();productB.use();}
}
代码解释:
此代码将工厂抽象化,Factory
定义了创建产品的抽象方法。ProductAFactory
ProductBFactory
定义每个抽象工厂分别专门生产某个产品。通过creatProduct()
方法来创建对象。