大话设计模式之简单工厂读后感
引言:让我们重温经典,致敬经典
简单工厂模式:根据调用端传参来有选择的实例化目标对象。
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 }
来总结下:
简单工厂里的生成的类,要求他们实现同样的接口,或者继承自同一个类,即具有同样的功能,但是又在细节上有所不同、各自的实现不一样。
当我们业务场景就像舞台表演一样的时候,基本的流程都是一样的,但是只有中间的某一个块具体的实现不一样,这时候你可以选择简单工厂。
以上可以说是自己读大话涉及模式的一些读后感,如果有不对的地方,希望能够指正出来。
越努力越幸运