您的位置:首页 > 其它

简单工厂设计模式

2015-08-04 21:10 288 查看
领卓教育培训第二十二天

简单工厂设计模式

简介

当我们在做一个项目的时候,往往会对代码改了又改,删了又删,寻求一个最完美的方案,当在调试的时候,每运行一次,都要重新进行编译。所以,要求我们在有新的需求或新的想法的时候,不是修改代码,而是增加代码的方式来实现,而且尽量让运行时,不再重新编译!

简单工厂模式由三种角色组成:

1、工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。

2、抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。

3、具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。

代码示例

创建Person接口

[code] public interface Person {
    public void sleep();
}


创建Studen类实现Person接口

[code]public class Student implements Person{

    @Override
    public void sleep() {
        System.out.println("学生睡觉!");
    }
}


创建Teacher类实现Person接口

[code]public class Teacher implements Person{

    @Override
    public void sleep() {
        System.out.println("老师睡觉!");
    }
}


在项目中创建一个properties文件,命名为config.properties

[code]object=lz20150804.d1.Student //包名.类名


创建工厂类

[code]import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;

public class Factory {
    public static Person creatPerson() {
        Person person=null;
        Properties p = new Properties();
        try {
            p.load(new FileInputStream("config.properties"));
            String name=p.getProperty("object");
            Class clazz=Class.forName(name);
            person=(Person) clazz.newInstance();    
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return person;
    }
}


创建Test类

[code]public class Test {
    public static void main(String[] args) {
        Person person=Factory.creatPerson();
        person.sleep();
    }
}


运行结果:




这样一个简单工厂模式就写好了,要想工厂创建Teacher类的实例时,只需将properties文件的Student改为Teacher即可,且无需重新编译!当需要添加内容的时候,只需新建一个类实现Person接口。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: