• java 创建简单工厂模式


    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.测试结果

  • 相关阅读:
    win7 下加载MSCOMCTL.OCX
    getGLES1ExtensionString: Could not find GLES 1.x config!
    IUnknown(TVarData(Params[0]).VPointer) as Range
    win8 VB6打开提示MSCOMCTL.ocx未注册
    服务端接口处理流任务要如何返回?
    flink之kafka生产和消费实战-将生产数据存放到mongodb中
    初识doris的那些基本概念
    bash常见用法
    sonar p3c规则配置
    sonar之gitlab ci 在gradle项目的实践(汉化、branch、 commit提交评论)
  • 原文地址:https://www.cnblogs.com/qinxu/p/9157237.html
Copyright © 2020-2023  润新知