携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第12天,点击查看活动详情
1.意图:
简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。通常它根据自变量的不同返回不同的类的实例。
2.适用性:
简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类的实例。
3.简单工厂(Simple Factory)模式的构成:
- 工厂类(Creator)角色:担任这个角色的是简单工厂模式的核心,含有与应用紧密相关的商业逻辑。工厂类在客户端的直接调用下创建产品对象,它往往由一个具体类实现。
- 抽象产品(Product)角色:担任这个角色的类是简单工厂模式所创建的对象的父类,或它们共同拥有的接口。抽象产品角色可以用一个接口或者抽象类实现。
- 具体产品(Concrete Product)角色:建党工厂模式所创建的人和对象都是这个角色的实例,具体产品角色由一个具体类实现。
4.简单工厂模式UML类图:
5.简单工厂模式UML序列图:
6.代码示例:
抽象产品:
public abstract class SchoolUser {
public String firstName;
public String lastName;
public String userType;
public void show() {
System.out.println("First Name: " + firstName);
System.out.println("Last Name: " + lastName);
System.out.println("User Type: " + userType);
}
}
具体产品:
public class SchoolPrincipal extends SchoolUser {
public SchoolPrincipal() {
firstName = "David";
lastName = "Smith";
userType = "Principal";
}
}
具体产品:
public class SchoolTeacher extends SchoolUser {
public SchoolTeacher() {
firstName = "Patrecia";
lastName = "Terry";
userType = "Teacher";
}
}
工厂角色:
public class SimpleFactory {
public static SchoolUser getSchoolUser(String user, String password) {
if ("Principal" == user && "Principal" == password) {
return new SchoolPrincipal();
}
if ("Teacher" == user && "Teacher" == password) {
return new SchoolTeacher();
}
return null;
}
}
客户角色:
public class Client {
public static void main(String[] args) {
SchoolUser user = null;
// 简单工厂模式的核心
user = SimpleFactory.getSchoolUser("Principal", "Principal");
System.out.println("校长登录:");
user.show();
System.out.println("----------------");
user = SimpleFactory.getSchoolUser("Teacher", "Teacher");
System.out.println("教师登录:");
user.show();
}
}