简单工厂设计模式

简单工厂设计模式

简介

当我们在做一个项目的时候,往往会对代码改了又改,删了又删,寻求一个最完美的方案,当在调试的时候,每运行一次,都要重新进行编译。所以,要求我们在有新的需求或新的想法的时候,不是修改代码,而是增加代码的方式来实现,而且尽量让运行时,不再重新编译!
简单工厂模式由三种角色组成:
1、工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。
2、抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。
3、具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。

代码示例

创建Person接口

 public interface Person {
    public void sleep();
}

创建Studen类实现Person接口

public class Student implements Person{

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

创建Teacher类实现Person接口

public class Teacher implements Person{

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

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

object=lz20150804.d1.Student //包名.类名

创建工厂类

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类

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

运行结果:
这里写图片描述
这样一个简单工厂模式就写好了,要想工厂创建Teacher类的实例时,只需将properties文件的Student改为Teacher即可,且无需重新编译!当需要添加内容的时候,只需新建一个类实现Person接口。

你可能感兴趣的:(设计模式,简单工厂设计模式)