设计模式学习——开始创建模式

来源:互联网 发布:java二维数组的定义 编辑:程序博客网 时间:2024/06/08 17:46

    简单工厂模式

当需要创建大量的产品时,并且这些产品具有相同的接口,那个我们可以通过工厂方法来进行创建。
比如我们有两个类
public class College {
public void study() {
System.out.println("我在大学学习!”);
}
}

public class HighSchool {
public void study() {
System.out.println("我在高中学习!");
}
}

这两个类都有共同的方法study(),因此可以将其进行抽取出来。
public interface Student {
public void study();
}

所以这两个类可以进行如下改装:
public class College implements Student {
@Override
public void study() {
System.out.println("我在大学学习!");
}
}

public class HighSchool implements Student {
@Override
public void study() {
System.out.println("我在高中学习!");
}
}
这样一个简单的接口实现类,就改装出来了。上面我们提到工厂,那么现在就看看用工厂获取对象。
public class StudyFactory {
public Student  studyStyle (String style) {
if("college".equals(style)) {
return new College();
} else if("high school".equals(style)) {
return new HighSchool();
} else {
System.out.println("情输入正确的身份!“);
return null;
}
}
}
这样一通写下来后,我们就会发现一个问题,如果我想创建一个学生,还得看看传什么字符串,即使这是自己写的,恐怕过一段时间,你也不知道该传什么字符串,更别说其他开发人员来调用,还得看源码,显然,这段代码是脏代码。那么我们再来看看下面这种创建方式:
public class StudyFactory {
public College buildCollege() {
return new College();
}
public HigeSchool buildHighSchool() {
return new HighSchool();
}
}

这样做确实改善了很多,但是想偷懒的我们可能又会觉得,每次调用还得创建一个对象,而且这个工厂对象创建出来后,调用一次就没用了,为此特地创建一个对象,感觉有点不值得,还是很麻烦,这时可能有的小伙伴已经想到了静态。接下来我们看看下面这种优化方式:

public class StudyFactory {

public static College buildCollege() {

return new College();

}

public static HighSchool BuildHighSchool() {

return new HighSchool();

}

}


这样看起来是不是好多了,这种方式起始也是我们大多数采用的工厂创建方式——静态工厂方法模式。
原创粉丝点击