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

大话设计模式之简单工厂读后感

时间:2018-03-31 00:53:01      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:log   package   print   相同   stat   desc   一个   time   提取   

引言:让我们重温经典,致敬经典

简单工厂模式:根据调用端传参来有选择的实例化目标对象。

UML类图:

技术分享图片

我们知道简单工厂就是为我们生成我们需要的对象。

举个栗子:

我们在舞台看表演的时候,一场场表演下来,我们可以总结个流程,舞台 表演1 ,表演2,表演3 。。。 结束。抽像为舞台 表演 结束。其实啊我们可以抽象为程序,有一个客户端,调用表演者的show方法,执行结束。关键不同的是,这个表演者的表演是不同的。

这里我们就可以引入简单工厂了,抽象出来一个表演者工厂,需要什么样的表演,就创建具备这种技能类的对象。

好比:需要唱歌,我们可以在表演者工厂里创建一个歌唱家这个类的对象,或者需要一个舞蹈表演,我们可以在表演者工厂里创建一个舞蹈家这个类的对象。

这些歌唱家、舞蹈家、码农啊我们可以把他们提取出来,来一个技能者,他们都是有技能的,再给他们一个展现技能的方法。来解释下为什么能这么抽取:

我们知道具有相同属性、相同功能的对象的集合叫做类!

歌唱者都会唱歌啊,可以抽象一个歌唱家这个类,舞蹈家、码农也是一样。而他们又都是有技能的人。也可以抽取出来,来个技能类哈。

代码:

 1 package com.dzf.designtest;
 2 
 3 /**
 4  * <desc>
 5  * 设计模式:简单工厂
 6  * 重要: 在工厂里面生成的对象要求具有相同的属性和功能 即:继承自同一个类,或者实现同一个接口
 7  * </desc>
 8  *
 9  * @author dingzf
10  * @date 2018/3/30
11  * @time 21:58
12  */
13 public class SimpleFactoryDemo {
14     //此时main方法就是一个舞台
15     public static void main(String[] args) {
16         //在表演工厂里面实例化需要的对象
17         //好比我们需要一个舞蹈者,当我们需要不同的功能的表演者的时候,可以通过改变参数来获取对应的对象
18         Skiller skiller = SkillerFactory.getSkiller("dancer");
19         skiller.show();
20     }
21 
22 }
23 
24 abstract class Skiller {
25     public abstract void show();
26 }
27 
28 class Dancer extends Skiller {
29     @Override
30     public void show() {
31         System.out.println("我来表演跳舞");
32     }
33 }
34 
35 class Singer extends Skiller {
36     @Override
37     public void show() {
38         System.out.println("我来表演精彩的舞蹈");
39     }
40 }
41 
42 class Coder extends Skiller {
43     @Override
44     public void show() {
45         System.out.println("我来表演专业写bug,让你们赞不绝口,哈哈哈~~");
46     }
47 }
48 
49 class SkillerFactory {
50     public static Skiller getSkiller(String desc) {
51         Skiller skiller = null;
52         switch (desc) {
53             case "dancer":
54                 skiller = new Dancer();
55                 break;
56             case "singer":
57                 skiller = new Singer();
58                 break;
59             case "coder":
60                 skiller = new Coder();
61                 break;
62         }
63         return  skiller;
64     }
65 
66 }

来总结下:

简单工厂里的生成的类,要求他们实现同样的接口,或者继承自同一个类,即具有同样的功能,但是又在细节上有所不同、各自的实现不一样。

当我们业务场景就像舞台表演一样的时候,基本的流程都是一样的,但是只有中间的某一个块具体的实现不一样,这时候你可以选择简单工厂。

以上可以说是自己读大话涉及模式的一些读后感,如果有不对的地方,希望能够指正出来。

大话设计模式之简单工厂读后感

标签:log   package   print   相同   stat   desc   一个   time   提取   

原文地址:https://www.cnblogs.com/zfding/p/8679002.html

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