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

  • 相关阅读:
    SQL中如何用一个表的列更新另一个表的列?
    ASPxGridView利用CheckBox实现全选
    DevExpress.NETv8.1(Web Controls)学习笔记
    ALSA vs OSS
    video telephone
    uClinux系统分析 转
    Using KVM On Ubuntu 7.10 (Gutsy Gibbon)转
    想买开发板,我真的需要么?
    uClinux的内存管理转
    各种开源软件授权方式的选择 (zt)
  • 原文地址:https://www.cnblogs.com/qinxu/p/9157237.html
Copyright © 2020-2023  润新知