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

设计模式分创建型、行为型、结构型;

工厂模式属于创建型模式,分(1)简单工厂(静态工厂)(2)工厂方法(3)抽象工厂,下面分别通过代码来介绍(本篇文章北风网的视频看后写的);

(一)简单工厂

  简单工厂描述:通过专门定义的一个类来创建其他类的实例,被创建的实例通常都具有共同的父类;

  简单工厂的角色及其职责:(1)工厂角色[creator]:该模式的核心,负责创建所有实例的内部逻辑,工厂类可以被外界直接调用,创建所需要的产品实例(2)抽象角色[Product]:简单工厂模式 所创建的所有对象的父类,它负责描述所有实例所共有的公共接口(3)具体产品角色[Concrete Product]:创建出来的具体实例;

  下面是个代码例子:

  (1)工厂角色类

 1 package com.pattern.factory.simple1;
 2 
 3 //工厂角色类
 4 //获得学生的工厂
 5 public class StudentFactory {
 6     
 7     //获得学生的方法,这个方法也可以写成静态的
 8     public Student getStudent(String stuType){
 9         
10         if("大学生".equals(stuType)){
11             return new UndergraduateStudent();
12         }else if("研究生".equals(stuType)){
13             return new GraduateStudent();
14         }else if("博士生".equals(stuType)){
15             return new DoctoralStudent();
16         }else{
17             System.out.println("小学神,没有该类");
18             return null;
19         }
20     }
21     
22 }
View Code

  (2)抽象角色(接口)

1 package com.pattern.factory.simple1;
2 
3 //学生接口
4 //抽象角色
5 public interface Student {
6     //显示一下
7     void show();
8 }    
View Code

  (3)具体产品角色类(3类学生)

    3.1  博士生

 1 package com.pattern.factory.simple1;
 2 
 3 //博士生
 4 public class DoctoralStudent implements Student {
 5 
 6     @Override
 7     public void show() {
 8         System.out.println("博士生");
 9     }
10 
11 }
View Code

   3.2  研究生

 1 package com.pattern.factory.simple1;
 2 
 3 //研究生
 4 public class GraduateStudent implements Student {
 5 
 6     @Override
 7     public void show() {
 8         System.out.println("研究生");
 9     }
10 
11 }
View Code

   3.2  大学生

 1 package com.pattern.factory.simple1;
 2 
 3 //大学生
 4 public class UndergraduateStudent implements Student {
 5 
 6     @Override
 7     public void show() {
 8         System.out.println("大学生");
 9     }
10 
11 }
View Code

(4)测试代码

 1 package com.pattern.factory.simple1;
 2 
 3 public class Test {
 4     
 5     public static void main(String[] args) {
 6         
 7         //1.要想获得个的学生,得先造个工厂,从学生工厂里拿学生
 8         StudentFactory stuFactory = new StudentFactory();
 9         //2.学生工厂建成了,就可以去工厂里拿学生了(就像校园招聘一样)
10         //先招个博士生,
11         Student doctoralStu = stuFactory.getStudent("博士生");
12         //证明一下自己
13         doctoralStu.show();
14         
15         //同样再去招研究生,大学生
16         Student graduateStu = stuFactory.getStudent("研究生");
17         graduateStu.show();
18         Student undergraduateStu = stuFactory.getStudent("大学生");
19         undergraduateStu.show();
20         
21         //传一个小学生
22         Student stu = stuFactory.getStudent("小学生");
23         stu.show();
24     }
25     
26 }
View Code

 测试结果:

  最后一个由于没有具体实例,就报了空指针异常

    简单工厂的优点:逻辑判断放在了整个工厂类中,用户在使用时,根据外界给定的条件,或得到所要的对象,不需要了解对象是怎么创建以及如何组织的;

  缺点:违背了“开放,闭合”原则(对扩展是开放的,而对修改是封闭的),增加一个具体角色的实例,就得修改工厂里的逻辑判断,扩展性不好;

原文地址:https://www.cnblogs.com/huaxueyihao/p/6533349.html