您的位置:首页 > 编程语言 > Java开发

16---java反射机制06(工厂设计模式)

2012-03-06 14:49 211 查看
工厂设计模式:最大的有点就是解耦合;

interface Fruit{

public void eat();//吃水果

}

class Apple implements Fruit{

public void eat(){

System.out.println("吃苹果");

}

}

class Orange implements Fruit{

public void eat(){

System.out.println("吃橘子");

}

}

class Factory{

public static Fruit getInstance(String className){

Fruit fruit=null;

if("apple".equals(className)){

fruit=new Apple();

}

if("orange".equals(className)){

fruit=new Orange();

}

return fruit;

}

}

public class Demo{

public static void main(String args[]){

Fruit f=Factory.getInstance("apple");

if(f!=null){

f.eat();

}

}

}

此时扩充子类,就得修改工厂;如果想扩充子类同时不用修改工厂类的话,则必须使用反射完成;

interface Fruit{

public void eat();//吃水果

}

class Apple implements Fruit{

public void eat(){

System.out.println("吃苹果");

}

}

class Orange implements Fruit{

public void eat(){

System.out.println("吃橘子");

}

}

class Factory{

public static Fruit getInstance(String className){

Fruit fruit=null;

try{

fruit=(Fruit)Class.forName(className).newInstance();

}

catch(Exception e){

}

return fruit;

}

}

public class Demo{

public static void main(String args[]){

Fruit f=Factory.getInstance("Apple");//“包.类”名称

if(f!=null){

f.eat();

}

}

}

上面实现了扩充子类不用修改工厂,但是也存在一些问题,就是用户必须输入完整的包点类名称;

这样很麻烦,此时可以通过配置文件的方式保存这些完整的类路径---属性文件;

程序运行的时候,就可以将属性文件的内容读取出来,之后直接操作属性文件的key,就

避免了输入过多的类路径了;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: