java中得到不同“type”的类实例

本文介绍了一种使用工厂模式创建不同类型的对象的方法,并通过Java代码实现了Person类及其子类Student和Teacher。通过定义一个工厂接口并由每个子类提供具体的工厂实现,可以灵活地根据类型字符串创建相应的对象实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基类:

import java.util.ArrayList;
import java.util.HashMap;


public class Person {
	public String name;

	public void say(String something) {
	}

	public interface Factory {
		public Person create();

		public String[] getSupportedExtensions();
	}
	
    static Factory[] sSubclassFactories = new Factory[] {
        Student.getFactory(),
        Teacher.getFactory(),
    };
	
    static ArrayList<String> sSupportedExtensions = new ArrayList<String>();
    static HashMap<String, Factory> sExtensionMap =
        new HashMap<String, Factory>();

    static {
        for (Factory f : sSubclassFactories) {
            for (String extension : f.getSupportedExtensions()) {
                sSupportedExtensions.add(extension);
                sExtensionMap.put(extension, f);
            }
        }
    }

	public static Person create(String type) {
		Factory factory = sExtensionMap.get(type);
		if (factory == null) {
			System.out.println("return null");
			return null;
		}
		Person person = factory.create();
		return person;
	}
}

继承它的类:



public class Student extends Person {
	public static String name = "Student";
	public void say(String something) {
		System.out.println("Student Say: " + something);
	}
	
    public static Factory getFactory() {
        return new Factory() {
            public Person create() {
            	System.out.println("return student");
                return new Student();
            }
            public String[] getSupportedExtensions() {
                return new String[] { "student" };
            }
        };
    }
    
}


public class Teacher extends Person{
	public static String name = "Teacher";
	public void say(String something) {
		System.out.println("Teacher Say: " + something);
	}
	
    public static Factory getFactory() {
        return new Factory() {
            public Person create() {
              	System.out.println("return teacher");
                return new Teacher();
            }
            public String[] getSupportedExtensions() {
                return new String[] { "teacher" };
            }
        };
    }
    
}

测试代码

public class Test {
	
	private Person teacher = null;
	private Person student = null;
	public static void main(String arg[]) {
		Test test = new Test();
		test.teacher = Person.create("teacher");
		test.teacher.say(test.teacher.name);
		
		test.student = Person.create("student");
		test.student.say(test.student.name);
	}

}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值