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

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.再看看运行结果

需要程序源码的可以加我微信x241602私聊。
原文地址:https://www.cnblogs.com/huipengbo/p/6954295.html