设计模式之工厂模式-简单工厂(02)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式之工厂模式-简单工厂(02)相关的知识,希望对你有一定的参考价值。
设计模式分创建型、行为型、结构型;
工厂模式属于创建型模式,分(1)简单工厂(静态工厂)(2)工厂方法(3)抽象工厂,下面分别通过代码来介绍(本篇文章北风网的视频看后写的);
(一)简单工厂
简单工厂描述:通过专门定义的一个类来创建其他类的实例,被创建的实例通常都具有共同的父类;
简单工厂的角色及其职责:(1)工厂角色[creator]:该模式的核心,负责创建所有实例的内部逻辑,工厂类可以被外界直接调用,创建所需要的产品实例(2)抽象角色[Product]:简单工厂模式 所创建的所有对象的父类,它负责描述所有实例所共有的公共接口(3)具体产品角色[Concrete Product]:创建出来的具体实例;
下面是个代码例子:
(1)工厂角色类
1 package com.sb.factory.simple; 2 3 //工厂角色类 4 //获得学生的工厂 5 public class StudentFactory { 6 7 //获得学生的方法,这个方法也可以写成静态的 8 public Student getStudent(String collegeName){ 9 10 if("北大".equals(collegeName)){ 11 return new PekingUStudent(); 12 }else if("清华".equals(collegeName)){ 13 return new TsinghuaUStudent(); 14 }else if("复旦".equals(collegeName)){ 15 return new FudanUStudent(); 16 }else{ 17 System.out.println("其他的学校的学生"); 18 return null; 19 } 20 } 21 22 }
(2)抽象角色(接口)
1 package com.sb.factory.simple; 2 3 //学生接口 4 //抽象角色 5 public interface Student { 6 //显示校训 7 void showXiaoXun(); 8 }
(3)具体产品角色类(3个学校的学生)
3.1 北大的学生
1 package com.sb.factory.simple; 2 3 //北京大学(Peking University),北大的 4 public class PekingUStudent implements Student{ 5 6 //北大校训 7 public void showXiaoXun(){ 8 System.out.println("爱国、进步、民主、科学"); 9 } 10 11 12 }
3.2 清华的学生
1 package com.sb.factory.simple; 2 3 //清华大学(Tsinghua University),清华的 4 public class TsinghuaUStudent implements Student{ 5 6 //清华校训 7 public void showXiaoXun(){ 8 System.out.println("自强不息,厚德载物 "); 9 } 10 11 }
3.2 复旦的学生
1 package com.sb.factory.simple; 2 3 //复旦大学(Fudan University),复旦的 4 public class FudanUStudent implements Student { 5 6 //复旦校训 7 public void showXiaoXun(){ 8 System.out.println("博学而笃志,切问而近思 "); 9 } 10 11 }
(4)测试代码
1 package com.sb.factory.simple; 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 pekingStudent = stuFactory.getStudent("北大"); 12 //调用方法,(考考他北大校训是啥啊,校训都答不上来,你上的是假北大吧) 13 pekingStudent.showXiaoXun(); 14 15 //同样获得复旦、清华的学生 16 Student tsinghuaStudent=stuFactory.getStudent("清华"); 17 tsinghuaStudent.showXiaoXun(); 18 19 Student FudanStudent = stuFactory.getStudent("复旦"); 20 FudanStudent.showXiaoXun(); 21 22 //这个学校,没有具体的实例,所以报错了(java.lang.NullPointerException) 23 Student beiniaoStudent = stuFactory.getStudent("北大青鸟"); 24 beiniaoStudent.showXiaoXun(); 25 26 } 27 28 }
测试结果:
最后一个由于没有具体实例,就报了空指针异常
简单工厂的优点:逻辑判断放在了整个工厂类中,用户在使用时,根据外界给定的条件,或得到所要的对象,不需要了解对象是怎么创建以及如何组织的;
缺点:违背了“开放,闭合”原则(对扩展是开放的,而对修改是封闭的),增加一个具体角色的实例,就得修改工厂里的逻辑判断,扩展性不好;
以上是关于设计模式之工厂模式-简单工厂(02)的主要内容,如果未能解决你的问题,请参考以下文章