码迷,mamicode.com
首页 > 其他好文 > 详细

工厂方法

时间:2019-01-01 17:54:24      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:rri   tac   ima   录制   VID   color   应用   override   cep   

1.定义:定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行

2.类型:创建型

3.适用场景:创建对象需要大量重复的代码,客户端(应用层)不依赖于产品类的实例如何被创建、实现等细节,

        一个类通过其子类来指定创建哪个对象

4.优点:用户只需要关心所需产品对应的工厂,无须关心创建细节;加入新产品符合开闭原则,提高可扩展性

5.缺点:类的个数容易过多,增加复杂度;增加了系统的抽象性和理解难度

6.实例目录package

技术分享图片

7.实例UML类图

技术分享图片

8.代码

1 package com.geely.design.pattern.creational.factorymethod;
2 
3 public abstract class Video {
4     public abstract void produce();
5 }
1 package com.geely.design.pattern.creational.factorymethod;
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.factorymethod;
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.factorymethod;
2 
3 public class FEVideo extends Video {
4     @Override
5     public void produce() {
6         System.out.println("录制FE课程视频");
7     }
8 }
 1 package com.geely.design.pattern.creational.factorymethod;
 2 
 3 public abstract class VideoFactory {
 4 
 5     public abstract Video getVideo();
 6     /*public Video getVideo(String type){
 7         if("java".equalsIgnoreCase(type)){
 8             return new JavaVideo();
 9         }else if("python".equalsIgnoreCase(type)){
10             return new PythonVideo();
11         }
12         return null;
13     }*/
14 
15     /*public Video getVideo(Class clazz){
16         Video video = null;
17         try{
18             video = (Video) Class.forName(clazz.getName()).newInstance();
19         }catch(InstantiationException e){
20             e.printStackTrace();
21         }catch(IllegalAccessException e){
22             e.printStackTrace();
23         }catch(ClassNotFoundException e){
24             e.printStackTrace();
25         }
26         return video;
27     }*/
28 }
1 package com.geely.design.pattern.creational.factorymethod;
2 
3 public class JavaVideoFactory extends VideoFactory {
4     @Override
5     public Video getVideo() {
6         return new JavaVideo();
7     }
8 }
1 package com.geely.design.pattern.creational.factorymethod;
2 
3 public class PythonVideoFactory extends VideoFactory {
4     @Override
5     public Video getVideo() {
6         return new PythonVideo();
7     }
8 }
1 package com.geely.design.pattern.creational.factorymethod;
2 
3 public class FEVideo extends Video {
4     @Override
5     public void produce() {
6         System.out.println("录制FE课程视频");
7     }
8 }
 1 package com.geely.design.pattern.creational.factorymethod;
 2 
 3 public class Test {
 4     public static void main(String[] args) {
 5 
 6        VideoFactory videoFactory = new JavaVideoFactory();
 7        Video video = videoFactory.getVideo();
 8        video.produce();
 9        VideoFactory videoFactory2 = new PythonVideoFactory();
10        Video video2 = videoFactory2.getVideo();
11        video2.produce();
12         VideoFactory videoFactory3 = new FEVideoFactory();
13         Video video3 = videoFactory3.getVideo();
14         video3.produce();
15     }
16 }

 

工厂方法

标签:rri   tac   ima   录制   VID   color   应用   override   cep   

原文地址:https://www.cnblogs.com/linbq1911/p/10205310.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!