工厂模式
1.工厂模式的定义
为何使用工厂模式
实例化活动不应该总是公开的进行,初始化经常造成“耦合”问题,一旦有变化或者扩展,必须打开检查修改实例化代码,通常修改的代码将造成部分系统更难维护和更新,也更容易犯错
工厂模式定义
工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是那一个。工厂方法让类把实例化推迟到子类
工厂方法模式通过让子类决定该创建的对象是什么,来带到将对象创建的过程封装的目的。
抽象工厂模式提供一种接口,用于创建相关或依赖对象的家族,而不需要明确指明具体类。工厂模式分类
1.简单工厂模式
简单工厂模式不是一种设计模式,比较像一种编习惯,就是通过if else在另一个类中判断,然后创建一个对象
public class simplePizzaFactory{
public Pizza createPizza(String type){
Pizza pizza = null;
if(type.equals("cheese")){
pizza=new CheeesePizza();
}else if(type.equals("pepperoni")){
pizza=new PepperoiniPizza();
}....
return pizza;
}
}
>>> message = '''interpreter
... prompt'''
2. 工厂模式
使用了继承,把对象的创建委托给子类,子类实现工厂方法来创建对象
·
““ java
public abstract class PizzaStore {
public Pizza oraderPizza(String type) {
Pizza pizza;
pizza=createPizza(type);
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return pizza;
}
abstract Pizza createPizza(String type);
}
public class NYPIzzaStore extends PizzaStore {
@Override
Pizza createPizza(String type) {
if(type.equals("cheese")) {
return new NYSteyCheesePizza();
}else if (type.equals("veggie")) {
return new NYStyleVeggiePizza();
}else return null;
}
}
public abstract class Pizza {
//名称
String name;
//面团
String dough;
//酱
String sauce;
//装饰
ArrayList<String> topppings = new ArrayList<>();
/**
*
* @Title: prepare
* @param 参数说明
* @return void 返回类型
* @throws
*/
void prepare() {
System.out.println("Preparing " + name);
System.out.println("Tossing dough....");
System.out.println("Adding sauce...");
System.out.println("Adding toppings");
for (int i = 0; i < topppings.size(); i++) {
System.out.println(" " + topppings.get(i));
}
}
/**
*
* @Title: bake
* @Description: TODO(烤披萨)
* @param 参数说明
* @return void 返回类型
* @throws
*/
void bake() {
System.out.println("Bake for 25 minutes at 350");
}
/**
*
* @Title: cut
* @Description: TODO(切披萨)
* @param 参数说明
* @return void 返回类型
* @throws
*/
void cut() {
System.out.println("Cutting the pizza into diagoanl slices");
}
/**
*
* @Title: box
* @Description: TODO(打包披萨)
* @param 参数说明
* @return void 返回类型
* @throws
*/
void box() {
System.out.println("Place pizza in official PizzaStore box");
}
public String getName() {
return name;
}
“`
3.抽象工厂模式
使用了对象组合,对象的创建被实现在工厂接口所暴露出来的方法中。
总结
- 工厂方法运行类将实例化延迟到子类进行
- 抽象工厂创建相关的对象家族,而不需要依赖他们的具体类
- 依赖倒置原则,指导我们避免具体列席,而要尽量依赖抽象。
- 工厂是很有威力的技巧,帮助我们针对抽象编程,而不要针对具体类编辑