1.抽象类

package com.zpark.service;

/**
* 定义一个环境接口,所有省治理环境的方式都实现这个接口,并重写治理环境的方法
* @author tong
*
*/
public interface Environmental {
public void governanceEnvironment();
}

2.实现类

package com.zpark.service.impl;

public class BeijingEnvironmental implements Environmental{
@Override
public void governanceEnvironment() {
System.out.println("【北京市治理环境的方法】");
}
}
package com.zpark.service.impl;

public class TianjinEnvironmental implements Environmental{
@Override
public void governanceEnvironment() {
System.out.println("【天津市治理环境的方法】");
}
}
package com.zpark.service.impl;

public class HebeiEnvironmental implements Environmental{
@Override
public void governanceEnvironment() {
System.out.println("【河北省治理环境的方法】");
}
}

3、简单工厂类

package com.zpark.utils;

public class EnvironmentalSimpleFactory {
//根据参数创建对象,这是一个静态方法可以直接使用类名调用
public static Environmental createSalary(String name) {
Class<Environmental> clazz = null;
Environmental salary = null;
try {
//利用反射机制获取该参数对应的类的对象
clazz = (Class<Environmental>) Class.forName(name);
//使用此类对象创建对应的环境类对象,这里使用父类指针指向子类对象,实现了多态
salary = (Environmental)clazz.newInstance();
}catch (Exception e) {
e.printStackTrace();
}
return salary;
}
}

4、测试方法

package com.zpark.test;

import org.junit.Test;

/**
* @author ceshi
* @Title: ${file_name}
* @Package ${package_name}
* @Description: ${todo}
* @date 2018/6/818:53
*/
public class EnvironmentalJunitTest {
@Test
public void test(){ //创建Client对象,以此对象调用computeSalary()方法传入要类型参数
new EnvironmentalJunitTest().computeSalaryEnvironmental("com.zpark.service.impl.BeijingEnvironmental");
new EnvironmentalJunitTest().computeSalaryEnvironmental("com.zpark.service.impl.HebeiEnvironmental");
new EnvironmentalJunitTest().computeSalaryEnvironmental("com.zpark.service.impl.TianjinEnvironmental"); } /**
* 根据传入的参数调用工厂类的创建环境治理方法,创建不同的薪资对象
* @param name
*/
public void computeSalaryEnvironmental(String name) {
//这里使用多态,根据传入参数的不同,生成ZhejiangSalary或者HebeiSalary对象
Environmental environmental = EnvironmentalSimpleFactory.createSalary(name);
//使用生成的对象动态调用具体类对象的方法
environmental.governanceEnvironment();
}
}

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. 转---CentOS安装Oracle数据库详细介绍及常见问题汇总

    一.安装前准备 1.软件硬件要求 操作系统:CentOS 6.4(32bit)Oracle数据库版本:Oracle 10g(10201_database_linux32.zip)最小内存:1G(检查命 ...

  2. [转]跳板机Jumpserve的生产环境配置

    6.跳板机Jumpserver]   Jumpserver是国内一款开源的轻便的跳板机系统,他们的官网:http://www.jumpserver.org/ 使用这款软件意在提高公司内部登录生产环境服 ...

  3. msp430及stm32中基本的C编程知识

    为什么我使用P1OUT ^= 0x01;和P1OUT = 0x01 ^是异或计算符号 所以 每次运算都是反转的.而不不加这个运算符就是一直保持1的状态. p1out|=bit6的意思p1out的值如果 ...

  4. WPF Demo511 控件共用事件

    路由事件: 1.路由事件一般使用的三种策略如下所示: A.Bubble(冒泡模式):事件从自己激发一直传递到根元素; B.Direct(直接模式):只有事件源才有机会相应事件(和传统事件一样); C. ...

  5. [CMAKE] 详解CMakeLists.txt文件

    [快速查询]https://cmake.org/cmake/help/v2.8.8/cmake.html#section_Commands 1 CMake简介 CMake是跨平台编译工具,比make更 ...

  6. Ubuntu 14.10 下SSH配置

    安装Hadoop时候需要设置SSH ,故将此过程记录下来   推荐安装 OpenSSH , Hadoop 需要通过 SSH 来启动 Slave 列表中各台主机的守护进程,因此 SSH 是必需安装的.虽 ...

  7. Tomcat中Url中文乱码解决办法

    引自:http://thoughtfly.iteye.com/blog/1533481 默认的tomcat容器如果直接使用get方式在url中传中文时,传到后台接收会是乱码. 乱码问题 原因: tom ...

  8. SQL优化系列——子查询

    sql调优方法: (1)not in子查询优化 尽量避免子查询select * from a where id not in(select id from b); select * from a wh ...

  9. appium工具 录制的方法

    参考: https://www.jianshu.com/p/5eef1bfa42ae

  10. HBase - Filter - 过滤器的介绍以及使用

    1 过滤器HBase 的基本 API,包括增.删.改.查等.增.删都是相对简单的操作,与传统的 RDBMS 相比,这里的查询操作略显苍白,只能根据特性的行键进行查询(Get)或者根据行键的范围来查询( ...