zoukankan      html  css  js  c++  java
  • 设计模式之工厂模式-简单工厂(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

     测试结果:

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

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

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

  • 相关阅读:
    luogu P2639 [USACO09OCT]Bessie的体重问题Bessie's We…
    1001. 害死人不偿命的(3n+1)猜想 (15)
    1003. 我要通过!(20)
    1002. 写出这个数 (20)
    《C语言程序设计(第四版)》阅读心得(一)
    1006. 换个格式输出整数 (15)
    背包问题之多重背包
    背包问题之完全背包
    背包问题之0-1背包
    动态规划例题
  • 原文地址:https://www.cnblogs.com/huaxueyihao/p/6533349.html
Copyright © 2011-2022 走看看