设计模式学习一之简单工厂模式
最近打算开始学习设计模式那就从最简单的工厂模式开始。
首先学习就必须了解其概念,网上看了许多概念说下自己的理解就是创建一个工厂类来决定你要创建什么实体类。来举个简单的栗子:你创建一个People的工厂类,通过这个工厂类中的方法你可以来创建出学生类和教师类。我们先写两个类,学生类和教师类。下面是对应的代码:
public class Student {
public void getRole(){
System.out.println("我是一名学生");
}
}
public class Teacher {
public void getRole(){
System.out.println("我是一名教师");
}
}
此时大家可以发现这两个类都有共同的方法。那么我们将其抽取出来编写一个接口,让这两个类都去实现它。
public interface People {
void getRole();
}
public class Student implements People {
@Override
public void getRole(){
System.out.println("我是一名学生");
}
}
public class Teacher {
@Override
public void getRole(){
System.out.println("我是一名教师");
}
}
此时,编写一个测试类去测试。代码如下:
public static void main(String[] args) {
//使用到了java中的多态。
People student=new Student();
People teacher=new Teacher();
student.getRole();
teacher.getRole();
}
}
这样效果就与我们第一次那样测试的效果是一样的,但是代码我们还是可以继续进行改进的。此时我们可以把这个对象的创建交给工厂去。然后根据一定的逻辑来决定你需要创建那个实体类。下面创建工厂类。并完成其中的相关代码:
public class PeopleFactory {
public static Object createObject(String s) throws IllegalAccessException, InstantiationException {
if(s.equalsIgnoreCase("student")){
//如果传入字符串为student,忽略大小写。则创建Studnet对象
return new Student();
//也可以使用反射的方式来创建
// return Student.class.newInstance();
}else if(s.equalsIgnoreCase("teacher")){
return new Teacher();
// return Teacher.class.newInstance();
}else{
return "没有实例对象";
}
}
}
也可以一个一个类去创建不用我这样去创建对应的类。此时测试类就需要改变一下。
public class TestPeople {
public static void main(String[] args) throws InstantiationException, IllegalAccessException {
People student=(Student) PeopleFactory.createObject("student");
People teacher=(Teacher) PeopleFactory.createObject("teacher");
student.getRole();
teacher.getRole();
}
}
这样整个简单工厂的基本实现就已经完成了。或许可能许多人也有跟我一样的疑问,直接new这个对象不就行了嘛?干嘛这么麻烦呢?其实我现在也没想清楚这样做的原因,哈哈。但是却发现其中的缺点:随着要创建的实例对象越多,那么就要去维护对应的工厂。
好了,这篇文章就这样了,大家也可以搜搜这样做的好处是什么?一起学习呀!