设计模式之工厂模式
工厂模式多用于创建初始化比较复杂繁琐的实体,并且对程序中实体的创建进行统一的配置及管理,大大提高程序的可维护性和可扩展性。
?
工厂模式之工厂方法
?
程序中实体类较少且划分比较简单是可以使用工厂方法模式
?
例:有学生类(Student) 老师类(Teacher)同时继承与人(Person)
?
我们可以设计这样的工厂类为我们产出对象
?
public class PersonFactory {
?
?public static final int STUDENT = 1;
?
?public static final int TEACHER = 2;
?
?public static Person getPerson(int type){
??Person person = null;
??if(type == PersonFactory.STUDENT) {
???person =? new Student();
??}else if(type == PersonFactory.TEACHER) {
???person = new Teacher();
??}
??return person;
?}
}
?
我们可以这样来获取对象 Student student = (Student)PersonFactory.getPerson(PersonFactory.STUDENT);
?
工厂模式之抽象工厂
?
程序中的实体分类不会这么简单,例如 学生还分为大学生 小学生,老师也分为大学老师 小学老师。工厂模式有该是什么样子的。
?
我们可以把工厂也细分为生产大学老师学生的工厂和生产小学老师和学生的工厂。但是我们有一个总工厂是这两个分工厂的抽象工厂。代码貌似是这样子的
?
总工厂:
?
public abstract class Factory {
?
?public abstract Student creatStudent();
?
?public abstract Teacher creatTeacher();
?
?public static Factory getFactory(int type) {
??Factory factory = null;
??if(type == 1) {
???factory = new DaFactory();
??}else if(type == 2) {
???factory = new XiaoFactory();
??}
??return factory;
?}
}
?
大学工厂:
?
public class DaFactory extends Factory{
?
?@Override
?public? Student creatStudent() {
??return new DaStudent();
?}
?@Override
?public Teacher creatTeacher() {
??return new DaTeacher();
?}
}
?
小学工厂:
?
public class XiaoFactory extends Factory{
?@Override
?public Student creatStudent() {
??return new XiaoStudent();
?}
?@Override
?public Teacher creatTeacher() {
??return new XiaoTeacher();
?}
}
?
?
再想获取实体对象就变成了这样 Student creatStudent = Factory.getFactory(2).creatStudent();
?
上面这个例子中其实把工厂也工厂话了,不管你们看没看懂,反正我是写完了......?