interface IMessage{
public void send(String str);
}
class MessageImpl implements IMessage{
public void send(String str){
System.out.println("---"+str);
}
}
class Factory{
public <T>T getInstance(String Classname){
if("MessageImpl".equalsIgnoreCase(Classname)){
return new MessageImpl<T>();
}
else
return null;
}
}
public class B{
public static void main(String args[]){
IMessage msg=Factory.getInstance("MessageImpl");
}
public void send(String str);
}
class MessageImpl implements IMessage{
public void send(String str){
System.out.println("---"+str);
}
}
class Factory{
public <T>T getInstance(String Classname){
if("MessageImpl".equalsIgnoreCase(Classname)){
return new MessageImpl<T>();
}
else
return null;
}
}
public class B{
public static void main(String args[]){
IMessage msg=Factory.getInstance("MessageImpl");
}
public static void main(String args[]){
IMessage msg = Factory.getInstance("MessageImpl");
if(msg != null) {
msg.send("aaa");
}
}
}interface IMessage{
void send(String str);
}class MessageImpl implements IMessage{
public void send(String str){
System.out.println("---"+str);
}
}class Factory{
public static IMessage getInstance(String Classname){
if("MessageImpl".equalsIgnoreCase(Classname)){
return new MessageImpl();
}
else
return null;
}
}
public void send(String str);
}class MessageImpl implements IMessage {
public void send(String str) {
System.out.println("---" + str);
}
}class Factory {
public static<T> T getInstance(String Classname, Class c) {
if ("MessageImpl".equalsIgnoreCase(Classname)) {
return (T)new MessageImpl();
} else
return null;
}
}public class B {
public static void main(String args[]) {
IMessage msg=Factory.getInstance("MessageImpl", IMessage.class);
}
}
public IMessage getInstance(String Classname)
先定义一个生产对象类的接口public interface Imessage{
public void send();
}然后是几个实现该接口的子类public class Message1 implements Imessage{
public void send(){
System.out.println("子类1");
}
}
public class Message2 implements Imessage{
public void send(){
System.out.println("子类2");
}
} 然后创建工厂类MessageFactory,getInstance方法创建相应类的实例public class MessageFactory{
public <T extends Imessage> T geInstance(Class<T> t){
Imessage message=null;
try{
message=(Imessage)Class.forName(c.getName()).newInstance();
}catch (InstantiationException e){
e.printStackTrace();
}catch(IllegalAccessException e){
e.printStackTrace();
}catch(ClassNotFoundException e){
e.printStackTrace();
}
return (T)message;
}}在测试类里用工厂类的getInstance分别创建两个类的实例,调用相应的send方法查看效果public class Test{
public static void main(String[] args){
MessageFactory f=new MessageFactory();
Imessage m1=f.getInstance(Message1.class);
Imessage m2=f.getInstance(Message2.class);
m1.send();
m2.send();
}
}不出意外,第一行输出"子类一",第二行“子类二”。
class是我忘了删了,可以省略
public static<T> T getInstance(String Classname) {
if ("MessageImpl".equalsIgnoreCase(Classname)) {
return (T)new MessageImpl();
} else
return null;
}
@SuppressWarnings("unchecked")
public static <T> T getInstance(Class<T> cls){
try {
return (T)Class.forName(cls.getCanonicalName()).newInstance();
} catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}
}
IMessage msg = Factory2.getInstance(MessageImpl.class);