设计模式之工厂模式(简单工厂模式)

时间:2022-07-29 20:31:58

1.为什么要用工厂模式

@1实例化对象不希望公开进行(new)

@2初始化的耦合问题

@3当代吗出现大量具体类的时候,一旦加入新的具体类就必须修改原有代码

@4将实例化具体类的代码从应用中抽离或者封装起来,使他们不会干扰应用的其他部分

@5当要创建的对象很多或者以后要增加对象时,封装这些要创建对象的代码

2.分类:简单工厂模式,工厂方法模式,抽象工厂模式

3.代码实战:

@1要生产的对象超类:

 1 package com.pattern.simplefactory;
2 /*
3 * 产品超类,披萨,每一种披萨都要经过下面的步骤卖给消费者
4 */
5 public abstract class Pizze {
6
7
8 abstract void prepare();//准备
9
10 abstract void bake();//烘烤
11
12 /*切片*/
13 abstract void cut();
14
15 /*打包*/
16 abstract void box();
17
18 /*销售*/
19 abstract void sale();
20
21 }

@2对象超类的子类

 1 package com.pattern.simplefactory;
2
3 /**
4 * 芝士披萨
5 * @author Administrator
6 *
7 */
8 public class CheesePizze extends Pizze {
9
10 @Override
11 void prepare() {
12 System.out.println("cheesepizze prepare");
13
14 }
15
16 @Override
17 void bake() {
18 System.out.println("cheesepizze bake");
19
20 }
21
22 @Override
23 void cut() {
24 System.out.println("cheesepizze cut");
25
26 }
27
28 @Override
29 void box() {
30 System.out.println("cheesepizze box");
31
32 }
33
34 @Override
35 void sale() {
36 System.out.println("cheesepizze sale ten yuan");
37
38 }
39
40 }
 1 package com.pattern.simplefactory;
2
3 /**
4 * 番茄披萨
5 * @author Administrator
6 *
7 */
8 public class VeggiePizze extends Pizze {
9
10 @Override
11 void prepare() {
12 System.out.println("veggiepizze prepare");
13
14 }
15
16 @Override
17 void bake() {
18 System.out.println("veggiepizze bake");
19
20 }
21
22 @Override
23 void cut() {
24 System.out.println("veggiepizze cut");
25
26 }
27
28 @Override
29 void box() {
30 System.out.println("veggiepizze box");
31
32 }
33
34 @Override
35 void sale() {
36 System.out.println("veggiepizze sale ten yuan");
37
38 }
39
40 }
 1 package com.pattern.simplefactory;
2
3 /**
4 * 沙拉披萨
5 * @author Administrator
6 *
7 */
8 public class SalaPizze extends Pizze {
9
10 @Override
11 void prepare() {
12 System.out.println("salapizze prepare");
13
14 }
15
16 @Override
17 void bake() {
18 System.out.println("salapizze bake");
19
20 }
21
22 @Override
23 void cut() {
24 System.out.println("salapizze cut");
25
26 }
27
28 @Override
29 void box() {
30 System.out.println("salapizze box");
31
32 }
33
34 @Override
35 void sale() {
36 System.out.println("salapizze sale ten yuan");
37
38 }
39
40 }

@3对象生产工厂,专门负责生产披萨对象,代替客户端去new对象

 1 package com.pattern.simplefactory;
2 /*
3 * 披萨工厂,为所有披萨分装创建对象的代码,只做一件事即生产披萨对象
4 */
5 public class SimplePizzeFactory {
6
7 public static Pizze createPizze(String type){//根据需要的类型生产对应的披萨
8
9 Pizze pz = null;
10 if(type.equals("cheese")){//芝士披萨
11 pz = new CheesePizze();
12 }else if(type.equals("veggie")){//番茄披萨
13 pz = new VeggiePizze();
14 }
15 else if(type.equals("sala")){//沙拉披萨
16 pz = new SalaPizze();
17 }
18
19 return pz;
20
21 }
22
23 }

@4需要对象的客户端,披萨商店

 1 package com.pattern.simplefactory;
2
3 /*
4 * 披萨商店,需要披萨对象来进行处理并销售
5 */
6 public class PizzeStore {
7
8
9
10 public static void main(String[] args) {
11
12 Pizze pz;
13 pz = SimplePizzeFactory.createPizze("sala");//让披萨工厂生产一个沙拉披萨,不需要自己再去new出来
14 pz.prepare();
15 pz.bake();
16 pz.cut();
17 pz.box();
18 pz.sale();
19
20 }
21
22
23
24 }

4.再看看运行结果

设计模式之工厂模式(简单工厂模式)