清远医院网站建设费用,怎么把自己做的网站发布,新型建筑塑料模板的价格,淘宝客网站做一种还是做好几种前言 1.工厂模式概念 实例化对象#xff0c;用工厂方法代替new操作(重点) 工厂模式包括工厂方法模式和抽象工厂模式 抽象工厂模式是工厂方法模式的扩展 2.什么情况下适合工厂模式 有一组类似的对象需要创建 在编码时不能预见需要创建哪种类的实例 系统需要考虑扩展性#xff… 前言 1.工厂模式概念 实例化对象用工厂方法代替new操作(重点) 工厂模式包括工厂方法模式和抽象工厂模式 抽象工厂模式是工厂方法模式的扩展 2.什么情况下适合工厂模式 有一组类似的对象需要创建 在编码时不能预见需要创建哪种类的实例 系统需要考虑扩展性不应依赖于产品类实例如果被创建、组合和表达的细节 女娲补天的故事大家都听说过吧今天不说这个说女娲创造人的故事可不是“造人”的工作这 个词被现代人滥用了。这个故事是说女娲在补了天后下到凡间一看哇塞风景太优美了天空是湛 蓝的水是清澈的空气是清新的太美丽了然后就待时间长了就有点寂寞了没有动物这些看的到 都是静态的东西呀怎么办 别忘了是神仙呀没有办不到的事情于是女娲就架起了八卦炉技术术语建立工厂开始创建人 具体过程是这样的先是泥巴捏然后放八卦炉里烤再扔到地上成长但是意外总是会产生的 第一次烤泥人兹兹兹兹~~感觉应该熟了往地上一扔biu~一个白人诞生了没烤熟 第二次烤泥人兹兹兹兹兹兹兹兹~~上次都没烤熟这次多烤会儿往地上一扔嘿熟过头了 黑人哪 第三次烤泥人兹~兹~兹~一边烤一边看着嘿正正好Perfect优品黄色人类 这个过程还是比较有意思的先看看类图 根据类图可以知道需要准备的类:
1.人类接口和对应实现
package factory1;/*** 定义一个人类接口* 首先定义什么是人类** author 1*/
public interface Human {/*** 人是愉快的会笑的本来是想用smile表示想了一下laugh更合适好长时间没有大笑了*/public void laugh();/*** 人类还会哭代表痛苦*/public void cry();/*** 人类会说话*/public void talk();
}package factory1;/*** 黄种人** author 1* version 1.0* description: TODO* date 2023/8/15 17:15*/
public class YellowHuman implements Human {Overridepublic void laugh() {System.out.println(黄色人类会大笑幸福呀);}Overridepublic void cry() {System.out.println(黄色人类会哭);}Overridepublic void talk() {System.out.println(黄色人类会说话一般说的都是双字节);}
}package factory1;/*** 白种人** author 1* version 1.0* description: TODO* date 2023/8/15 17:16*/
public class WhiteHuman implements Human {Overridepublic void laugh() {System.out.println(白色人类会大笑侵略的笑声);}Overridepublic void cry() {System.out.println(白色人类会哭);}Overridepublic void talk() {System.out.println(白色人类会说话一般都是但是单字节);}
}package factory1;/*** 黑人** author 1* version 1.0* description: TODO* date 2023/8/15 17:17*/
public class BlackHuman implements Human {Overridepublic void laugh() {System.out.println(黑人会笑);}Overridepublic void cry() {System.out.println(黑人会哭);}Overridepublic void talk() {System.out.println(黑人可以说话一般人听不懂);}
}2.八卦炉
package factory1;import java.util.List;
import java.util.Random;/*** 造人工厂* 女娲造人的故事:** author 1* version 1.0* description: 很久很久以前盘古开辟了天地用身躯造出日月星辰、山川草木天地一片繁华* 一天女娲下界走了一遭哎太寂寞太孤独了没个会笑的、会哭的、会说话的东东* 那怎么办呢不用愁女娲神仙呀造出来呀然后捏泥巴放八卦炉后来这个成了太白金星的宝* 贝中烤于是就有了人* 我们把这个生产人的过程用Java程序表现出来* date 2023/8/15 17:19*/
public class HumanFactory {/*** 定义一个八卦炉子** param c* return*/public static Human createHuman(Class c) {//定义一个类型的人类Human human null;try {//生产一个人类human (Human) Class.forName(c.getName()).newInstance();} catch (InstantiationException e) {System.out.println(必须指定人类颜色);} catch (IllegalAccessException e) {System.out.println(定义的人类错误);} catch (ClassNotFoundException e) {System.out.println(定义的人类找不到);}return human;}/*** 女娲生气了把一团泥巴塞到八卦炉哎产生啥人类就啥人类** return*/public static Human createHuman() {//定义一个类型的人类Human human null;//首先是获得有多少个实现类多少个人类//定义了多少人类ListClass concreteHumanList ClassUtils.getAllClassByInterface(Human.class);//八卦炉自己开始想烧出什么人就什么人Random random new Random();int rand random.nextInt(concreteHumanList.size());human createHuman(concreteHumanList.get(rand));return human;}
}批量工具类:主要实现根据接口查找实现类(属于扩展知识)
package factory1;import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;/*** author 1* version 1.0* description: TODO* date 2023/8/15 17:48*/
SuppressWarnings(all)
public class ClassUtils {//给一个接口返回这个接口的所有实现类public static ListClass getAllClassByInterface(Class c){ListClass returnClassList new ArrayListClass(); //返回结果//如果不是一个接口则不做处理if(c.isInterface()){String packageName c.getPackage().getName(); //获得当前的包名try {//获得当前包下以及子包下的所有类ListClass allClass getClasses(packageName);//判断是否是同一个接口for(int i0;iallClass.size();i){if(c.isAssignableFrom(allClass.get(i))){ //判断是不是一个接口if(!c.equals(allClass.get(i))){ //本身不加进去returnClassList.add(allClass.get(i));}}}} catch (ClassNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}return returnClassList;}//从一个包中查找出所有的类在jar包中不能查找private static ListClass getClasses(String packageName)throws ClassNotFoundException, IOException {ClassLoader classLoader Thread.currentThread().getContextClassLoader();String path packageName.replace(., /);EnumerationURL resources classLoader.getResources(path);ListFile dirs new ArrayListFile();while (resources.hasMoreElements()) {URL resource resources.nextElement();dirs.add(new File(resource.getFile()));}ArrayListClass classes new ArrayListClass();for (File directory : dirs) {classes.addAll(findClasses(directory, packageName));}return classes;}private static ListClass findClasses(File directory, String packageName)throws ClassNotFoundException {ListClass classes new ArrayListClass();if (!directory.exists()) {return classes;}File[] files directory.listFiles();for (File file : files) {if (file.isDirectory()) {assert !file.getName().contains(.);classes.addAll(findClasses(file, packageName . file.getName()));} else if (file.getName().endsWith(.class)) {classes.add(Class.forName(packageName . file.getName().substring(0, file.getName().length() - 6)));}}return classes;}
}女娲类 package factory1;/*** 女娲** author 1* version 1.0* description: TODO* date 2023/8/15 17:28*/
public class NvWa {public static void main(String[] args) {System.out.println((1)女娲第一次造人,火候不足,白人----------------);Human witheHuman HumanFactory.createHuman(WhiteHuman.class);witheHuman.talk();witheHuman.laugh();witheHuman.cry();System.out.println((2)女娲第二次造人火候加足点然后又出了个次品黑人------------------);Human blackHuman HumanFactory.createHuman(BlackHuman.class);blackHuman.cry();blackHuman.laugh();blackHuman.talk();System.out.println((3)女娲第三次造人这次火候掌握的正好黄色人类-----------------);Human yellowHuman HumanFactory.createHuman(YellowHuman.class);yellowHuman.cry();yellowHuman.laugh();yellowHuman.talk();System.out.println((4)女娲让八卦炉随机造人------------------);for (int i 0; i 10; i) {System.out.println(随机产生人类******* i);Human human HumanFactory.createHuman();human.cry();human.laugh();human.talk();}}
}运行结果
(1)女娲第一次造人,火候不足,白人----------------
白色人类会说话一般都是但是单字节
白色人类会大笑侵略的笑声
白色人类会哭
(2)女娲第二次造人火候加足点然后又出了个次品黑人------------------
黑人会哭
黑人会笑
黑人可以说话一般人听不懂
(3)女娲第三次造人这次火候掌握的正好黄色人类-----------------
黄色人类会哭
黄色人类会大笑幸福呀
黄色人类会说话一般说的都是双字节
(4)女娲让八卦炉随机造人------------------
随机产生人类*******0
白色人类会哭
白色人类会大笑侵略的笑声
白色人类会说话一般都是但是单字节
随机产生人类*******1
黄色人类会哭
黄色人类会大笑幸福呀
黄色人类会说话一般说的都是双字节
随机产生人类*******2
白色人类会哭
白色人类会大笑侵略的笑声
白色人类会说话一般都是但是单字节
随机产生人类*******3
黑人会哭
黑人会笑
黑人可以说话一般人听不懂
随机产生人类*******4
黑人会哭
黑人会笑
黑人可以说话一般人听不懂
随机产生人类*******5
黑人会哭
黑人会笑
黑人可以说话一般人听不懂
随机产生人类*******6
白色人类会哭
白色人类会大笑侵略的笑声
白色人类会说话一般都是但是单字节
随机产生人类*******7
黑人会哭
黑人会笑
黑人可以说话一般人听不懂
随机产生人类*******8
黑人会哭
黑人会笑
黑人可以说话一般人听不懂
随机产生人类*******9
白色人类会哭
白色人类会大笑侵略的笑声
白色人类会说话一般都是但是单字节