简单工厂模式

1.定义:有一个工厂对象决定创建出哪一种产品类的实例。

2.类型:创建型,但不属于GOF23种设计模式

3.适用场景:工厂类负责创建的对象比较少,客户端(应用层)只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心

4.优点:只需要传入一个正确的参数,就可以获取你所需要的对象而无须知道其创建细节

5.缺点:工厂类的职责相对过重,增加新的产品需要修改工厂类的判断逻辑,违背开闭原则

6.实例目录package

7.实例UML类图

7.代码

1 package com.geely.design.pattern.creational.simplefactory;
2 
3 public abstract class Video {
4     public abstract void produce();
5 }
1 package com.geely.design.pattern.creational.simplefactory;
2 
3 public class JavaVideo extends Video {
4     public void produce() {
5         System.out.println("录制Java课程视频");
6     }
7 }
1 package com.geely.design.pattern.creational.simplefactory;
2 
3 public class PythonVideo extends Video {
4     public void produce() {
5         System.out.println("录制Python课程视频");
6     }
7 }
 1 package com.geely.design.pattern.creational.simplefactory;
 2 
 3 public class VideoFactory {
 4     /*public Video getVideo(String type){
 5         if("java".equalsIgnoreCase(type)){
 6             return new JavaVideo();
 7         }else if("python".equalsIgnoreCase(type)){
 8             return new PythonVideo();
 9         }
10         return null;
11     }*/
12 
13     public Video getVideo(Class clazz){
14         Video video = null;
15         try{
16             video = (Video) Class.forName(clazz.getName()).newInstance();
17         }catch(InstantiationException e){
18             e.printStackTrace();
19         }catch(IllegalAccessException e){
20             e.printStackTrace();
21         }catch(ClassNotFoundException e){
22             e.printStackTrace();
23         }
24         return video;
25     }
26 }
 1 package com.geely.design.pattern.creational.simplefactory;
 2 
 3 public class Test {
 4     public static void main(String[] args) {
 5 
 6        /* Video video = new JavaVideo();
 7         video.produce();
 8         Video video2 = new PythonVideo();
 9         video2.produce();*/
10 
11         /*VideoFactory videoFactory = new VideoFactory();
12         Video video = videoFactory.getVideo("java");
13         if(video == null){
14             return;
15         }
16         video.produce();
17         Video video2 = videoFactory.getVideo("python");
18         if(video2 == null){
19             return;
20         }
21         video2.produce();*/
22 
23         VideoFactory videoFactory = new VideoFactory();
24         Video video = videoFactory.getVideo(JavaVideo.class);
25         if(video == null){
26             return;
27         }
28         video.produce();
29         Video video2 = videoFactory.getVideo(PythonVideo.class);
30         if(video2 == null){
31             return;
32         }
33         video2.produce();
34     }
35 }

 

posted @ 2019-01-01 17:04  逢春  阅读(165)  评论(0编辑  收藏  举报