关键词:
引言:让我们重温经典,致敬经典
简单工厂模式:根据调用端传参来有选择的实例化目标对象。
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
来总结下:
简单工厂里的生成的类,要求他们实现同样的接口,或者继承自同一个类,即具有同样的功能,但是又在细节上有所不同、各自的实现不一样。
当我们业务场景就像舞台表演一样的时候,基本的流程都是一样的,但是只有中间的某一个块具体的实现不一样,这时候你可以选择简单工厂。
以上可以说是自己读大话涉及模式的一些读后感,如果有不对的地方,希望能够指正出来。
大话设计模式之简单工厂模式(代码片段)
大话设计模式——简单工厂模式--参考自《大话设计模式》需求现在有一个需求,实现一个简单的计算器对于一般的初学者来说可能会这么实现:publicclasscalculatepublicstaticvoidmain(String[]args)Scannercin=newScanner(System.in);System.out.println(&qu... 查看详情
大话设计模式之简单工厂模式(代码片段)
背景需求:模拟一个简单计算器。UML类图:说明:抽象类AbstractOperation有一个抽象方法getResult和两个成员变量,加减乘除分别继承AbstractOperation并实现getResult方法即可。OperationFactory是一个简单工厂方法,可根据入参实例化不同的... 查看详情
《大话设计模式》——读后感代码无错就是优?——简单工厂模式
本篇是我学习设计模式后的第一篇文章,由于本模式也比较简单,在此我就多啰嗦一下。学习本模式之前请下看一下我的《大话设计模式铺垫》文章,然后回答思考如下问题:1、UML类图看懂了吗?2、java的3大特性真的懂了吗?... 查看详情
《大话设计模式》——读后感雷锋依然在人间?——工厂方法模式
什么是工厂方法模式:工厂方法UML结构图:从图中我获取以下信息:1、Product是个接口,而Creator是个抽象类(我还是试试接口)2、ConcreateProduct和ConcreteCreator是有依赖关系的,后者依赖前者 接下来看看简单工厂模式中例子用... 查看详情
大话设计模式之策略模式读后感(代码片段)
策略模式:定义了算法家族,分别封装起来,让他们呢之间可以互相的替换,此模式让算法的变化不会影响到使用算法的客户。UML类图:解读:策略模式是定义一系列的算法,从概念上来讲,这些算法完成的工作都是一样的,只... 查看详情
python大话设计模式:简单工厂模式(蟒版)(代码片段)
csharp大话设计模式:简单工厂模式(c#版)(代码片段)
《大话设计模式》——读后感老板回来了,我不知道?——观察者模式之理论实例
单独看UML类图,有没有发现观察者类图和工厂方法模式的类图和相似?不过代码实现可不一样哦抽象观察者:packagecom.sjmx.observer.theory;publicinterfaceWatcher{publicvoidupdate(Stringstr);}具体观察者:packagecom.sjmx.observer.theory;publicclassConcreteWat... 查看详情
大话设计模式之简单工厂模式
简单工厂模式 最近朋友推荐了一本书《大话设计模式》,此书刚刚到,博主也还没开始看,希望以博文的方式与大家一起分享,一起学习.简单工厂模式,也就是说,到底要实列化谁,将来会不会增加实列化的对象,比如增加开根运算,... 查看详情
大话设计模式第八章之简单工厂模式
简单工厂模式 工厂方法模式 packagecom.dp.factory;interfaceIFactory{CalculatorCreateCalculator();}classAddFactoryimplementsIFactory{@OverridepublicCalculatorCreat 查看详情
大话设计模式--第一章简单工厂设计模式(代码片段)
简单工厂设计模式案例:写一个计算器,实现加减乘除.第一步:写一份简单的代码packagecom.chapter1;publicclassCaculator1publicstaticvoidmain(String[]args)if(args.length<3)System.out.println("参数个数异常");return;Doublenum1=Double.parseDoubl 查看详情
大话设计模式--简单工厂模式(代码片段)
问题:请用C++,JAVA,C#任意一种以面向对象语言实现一个计算器控制台程序:要求输入2个数和运算符号,得到结果第一次编码:publicclassProgrampublicstaticvoidmain(String[]args)throwsIOExceptionSystem.out.println("请 查看详情
大话设计模式第一章之简单工厂模式
packagecom.dp.simpleFactory;//计算器作为抽象类定义一个计算需要什么子类继承了两个数字并且要有自己的计算实现方法publicabstractclassCalculator{protecteddoublenumberA=0;protecteddoublenumberB=0;publicdoublegetNumberA(){returnnumberA;}publicvoid 查看详情
《大话设计模式》——读后感商场促销?——策略模式
...对商场促销进行各种各样的打折进行设计案例的,而大话设计模式中还提到: 等等,打折、返现等等一系列促销具体方式 查看详情
《大话设计模式》——读后感老板回来了,我不知道?——观察者模式之事件委托
什么都不说,直接上代码,自己去理解,要结合动态代理看Event:packagecom.sjmx.observer.application;importjava.lang.reflect.Method;publicclassEvent{privateObjectobject;privateStringmethodName;privateObject[]params;privateClass[]par 查看详情
《大话设计模式》——读后感好菜每回味不同——建造者模式之经典案例
本文参考地址:http://www.cnblogs.com/xieweikai/p/6826481.html建造者模式应用场景比如在玩“极品飞车”这款游戏,那么每一关的地图会千变万化,简单的来说,地图会有晴天和阴天之分,那么创建地图时就要根据晴天或者阴天来对地图... 查看详情
java之抽象工厂模式(大话设计模式)
...们还是要吸取其思想而不是生搬硬套。来看下类图:大话设计模式-类图看类图已经很乱了,来简单的梳理下。我们只看接口,这样就不难看出实际上是抽象工厂生产抽象产品的过程,而具体实现都是各自的实现类来做。看下具... 查看详情
设计模式之简单工厂模式(代码片段)
简单来说,工厂模式就是按照需求来返回一个类型的对象,使用工厂模式的意义就是,如果对象的实例化与代码依赖太大的话,不方便进行扩展和维护,使用工厂的目的就是使对象的实例化与主程序代码就行解耦.1.简单工厂模式简介简... 查看详情