1.抽象类

  1. package com.zpark.service;
  2.  
  3. /**
  4. * 定义一个环境接口,所有省治理环境的方式都实现这个接口,并重写治理环境的方法
  5. * @author tong
  6. *
  7. */
  8. public interface Environmental {
  9. public void governanceEnvironment();
  10. }

2.实现类

  1. package com.zpark.service.impl;
  2.  
  3. public class BeijingEnvironmental implements Environmental{
  4. @Override
  5. public void governanceEnvironment() {
  6. System.out.println("【北京市治理环境的方法】");
  7. }
  8. }
  1. package com.zpark.service.impl;
  2.  
  3. public class TianjinEnvironmental implements Environmental{
  4. @Override
  5. public void governanceEnvironment() {
  6. System.out.println("【天津市治理环境的方法】");
  7. }
  8. }
  1. package com.zpark.service.impl;
  2.  
  3. public class HebeiEnvironmental implements Environmental{
  4. @Override
  5. public void governanceEnvironment() {
  6. System.out.println("【河北省治理环境的方法】");
  7. }
  8. }

3、简单工厂类

  1. package com.zpark.utils;
  2.  
  3. public class EnvironmentalSimpleFactory {
  4. //根据参数创建对象,这是一个静态方法可以直接使用类名调用
  5. public static Environmental createSalary(String name) {
  6. Class<Environmental> clazz = null;
  7. Environmental salary = null;
  8. try {
  9. //利用反射机制获取该参数对应的类的对象
  10. clazz = (Class<Environmental>) Class.forName(name);
  11. //使用此类对象创建对应的环境类对象,这里使用父类指针指向子类对象,实现了多态
  12. salary = (Environmental)clazz.newInstance();
  13. }catch (Exception e) {
  14. e.printStackTrace();
  15. }
  16. return salary;
  17. }
  18. }

4、测试方法

  1. package com.zpark.test;
  2.  
  3. import org.junit.Test;
  4.  
  5. /**
  6. * @author ceshi
  7. * @Title: ${file_name}
  8. * @Package ${package_name}
  9. * @Description: ${todo}
  10. * @date 2018/6/818:53
  11. */
  12. public class EnvironmentalJunitTest {
  13. @Test
  14. public void test(){
  15.  
  16. //创建Client对象,以此对象调用computeSalary()方法传入要类型参数
  17. new EnvironmentalJunitTest().computeSalaryEnvironmental("com.zpark.service.impl.BeijingEnvironmental");
  18. new EnvironmentalJunitTest().computeSalaryEnvironmental("com.zpark.service.impl.HebeiEnvironmental");
  19. new EnvironmentalJunitTest().computeSalaryEnvironmental("com.zpark.service.impl.TianjinEnvironmental");
  20.  
  21. }
  22.  
  23. /**
  24. * 根据传入的参数调用工厂类的创建环境治理方法,创建不同的薪资对象
  25. * @param name
  26. */
  27. public void computeSalaryEnvironmental(String name) {
  28. //这里使用多态,根据传入参数的不同,生成ZhejiangSalary或者HebeiSalary对象
  29. Environmental environmental = EnvironmentalSimpleFactory.createSalary(name);
  30. //使用生成的对象动态调用具体类对象的方法
  31. environmental.governanceEnvironment();
  32. }
  33. }

5.测试结果

java 创建简单工厂模式的更多相关文章

  1. java 之 简单工厂模式(大话设计模式)

    以前只是看设计模式,每次看完都去理解一次,并没有手动去写代码,所以理解的还不是很深刻,最近查看框架源码,发现很多地方用到的都是设计模式,因为对设计模式理解的不够深刻,所以源码查看进度很慢!现在决定来温 ...

  2. Java反射+简单工厂模式总结

    除了 new 之外的创建对象的方法 通过 new 创建对象,会使得程序面向实现编程,先举个例子,某个果园里现在有两种水果,一种是苹果,一种是香蕉,有客户想采摘园子里的水果,要求用get()方法表示即可 ...

  3. Java设计模式 -- 简单工厂模式(SimpleFactory)

    一.什么是简单工厂模式 简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式.通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 二.模式中包含的角色及其职责 1.工厂(C ...

  4. Java实现简单工厂模式

    昨天看了一下设计模式,复习了一下简单工厂模式,做个笔记,浅淡一下我对简单工厂模式的理解.书上使用的是C#,因为我所学的是Java,所以本人就用Java实现了一遍.如果有讲的不对的地方,希望能够指出来. ...

  5. java之简单工厂模式详解

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...

  6. Java设计模式-简单工厂模式(Static Factory Method)

    简单工厂模式(Static Factory Method) 简单工厂模式是类的创建模式,又叫静态工厂方法(Static Factory Method)模式.简单工厂模式是由一个工厂对象决定创建出哪一种 ...

  7. 设计模式(java)--简单工厂模式之女娲造人.水果农场

    女娲抟土造人 话说:“天地开辟,未有人民,女娲抟土为人.”女娲需要用土造出一个个的人,但在女娲造出人之前,人的概念只存在于女娲的思想里面. 女娲造人,这就是简单工厂模式的应用.  首先,在这个造人的思 ...

  8. java的简单工厂模式

    目录 代码讲解 UML图解简单工厂 优点 缺点: 改进: 代码讲解 产品功能接口: /** * 定义接口,抽象出产品都具有的功能 */ interface Produce { void method( ...

  9. java设计模式--简单工厂模式

     简单工厂设计模式 工厂模式就是专门负责将大量有共同接口的类实例化,而且不必事先知道每次是要实例化哪一个类的模式.它定义一个用于创建对象的接口,由子类决定实例化哪一个类. 核心知识点如下: (1) 大 ...

随机推荐

  1. Java-Runoob-高级教程-实例-数组:13. Java 实例 – 数组交集

    ylbtech-Java-Runoob-高级教程-实例-数组:13. Java 实例 – 数组交集 1.返回顶部 1. Java 实例 - 数组交集  Java 实例 以下实例演示了如何使用 reta ...

  2. Java项目配置redis

    成功配置redis之后,便来学习使用redis.首先了解下redis的数据类型. Redis的数据类型 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set( ...

  3. Jmeter(十九)Logic Controllers 之 Module Controller and Include Controller

    Module Controller ---模块控制器 测试计划设置“独立运行没每个线程组” 线程组2中使用Module Controller执行线程组1中的Sampler: 紧接着,将线程组1disa ...

  4. [UE4]虚幻4链接独立服务器

    如果虚幻4只做客户端的话,应该怎么连接服务器呢? 官方并没有提供蓝图的网络函数,C++里面有. 一.自己实现,提供接口给蓝图使用. 二.第三方插件.插件下载地址:https://github.com/ ...

  5. [UE4]AWP狙击枪开镜

    一.使用一张PNG图片,中间是透明的,其他部分是纯黑色.创建一个UserWidget.作为AWP的开镜后的准心.AWP默认状态下是没有准心的. 二.右键开镜.把第一步创建的UserWidget创建出来 ...

  6. laravel文件上传报错 stream_socket_sendto():

    原因:文件超过限定大小或没指定临时目录 修改php.ini配置 file_uploads = On ; Temporary directory for HTTP uploaded files (wil ...

  7. conda命令

  8. 在linux下,去除^M,将windows格式文件(dos文件)改为unix格式文件

    在Windows系统下编辑的文件,换行符回车的格式为'\r\n',在linux系统下,回车的格式为'\n',在Windows下编辑的文本文件在上传至linux服务器时,回车'\r\n'就显示成^M+' ...

  9. 前端UI框架之layUI学习

    用layUI框架来进行我们的页面速写,还是非常不错的,虽然2016年诞生,在我使用的过程中,觉得比bootstrap更轻盈点,总结下用的最多的组件. form表单下拉框: <!DOCTYPE h ...

  10. Unity中进程间通信——使用异步Socket

    开发Unity项目过程中,即时通信功能来完成服务器与客户端自定义的数据结构封装. 如果要序列化和数据封装参考:Unity3D之C#用Socket传数据包 蓝鸥3G封装的类 客户端脚本ClientScr ...