85 lines
2.0 KiB
Markdown
85 lines
2.0 KiB
Markdown
---
|
|
title: 设计模式
|
|
date: 2023-01-03 10:11:47
|
|
author: 文永达
|
|
tags: [设计模式, 软件工程, 工厂模式, 架构]
|
|
categories: [软件工程, 设计模式]
|
|
---
|
|
|
|
# 设计模式
|
|
|
|
## 工厂模式
|
|
|
|
### 概述
|
|
|
|
该模式用来封装和管理类的创建,终极目的是为了解耦,实现创建者和调用者的分离。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
|
|
|
|
工厂模式可以细分为三种:
|
|
|
|
**简单工厂模式**
|
|
|
|
**工厂方法模式**
|
|
|
|
**抽象工厂模式**
|
|
|
|
### 传统模式
|
|
|
|
创建不同种类的pizza对象
|
|
|
|
```java
|
|
Pizza orderPizza(String type) {
|
|
Pizza pizza;
|
|
if(type.equals("chess"){
|
|
pizza = new ChessPizza();
|
|
}else if(type.equals("greek"){
|
|
pizza = new GreekPizza();
|
|
}else if(type.equals("apple"){
|
|
pizza = new ApplePizza();
|
|
}
|
|
....
|
|
//准备材料
|
|
pizza.prepare();
|
|
//烘烤
|
|
pizza.bake();
|
|
//切
|
|
pizza.cut();
|
|
//装盒
|
|
pizza.box();
|
|
return pizza;
|
|
}
|
|
```
|
|
|
|
|
|
|
|
### 简单工厂模式
|
|
|
|
在传统模式中直接让调用者去创建对象。但是,假如创建对象的过程比较复杂,我们可以将其交由一个新的类来创建,这种类叫工厂类,调用者只需要调用这个类的函数来创建对象就行了,无需再书写创建对象。
|
|
|
|
```java
|
|
public class SimpleFactory {
|
|
|
|
public static Pizza createPizza(String pizzaType){
|
|
Pizza pizza = null;
|
|
System.out.println("使用了简单工厂模式");
|
|
if (pizzaType.equals("greek")) {
|
|
pizza = new GreekPizza();
|
|
pizza.setName("greek");
|
|
} else if (pizzaType.equals("chess")) {
|
|
pizza = new ChessPizza();
|
|
pizza.setName("chess");
|
|
} else if (pizzaType.equals("pepper")) {//新增PepperPizza的时候 修改了源代码 违反了ocp原则 如果新增10000个?
|
|
//那就很麻烦了
|
|
pizza = new PepperPizza();
|
|
pizza.setName("pepper");
|
|
}
|
|
|
|
return pizza;
|
|
}
|
|
}
|
|
```
|
|
|
|
|
|
|
|
###
|
|
|