定义
简单工厂模式属于创建型模式,是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
工厂职责描述
工厂角色(Creator):这是简单工厂模式的核心,它负责创建所需要的产品对象。
抽象(Product)产品角色:简单工厂模式所创建的所有对象的父类,可以是接口也可以是抽象类,提供所有实例所共有的公共接口。
具体产品(Concrete Product)角色:简单工厂所创建的具体实例对象,拥有共同的父类。
场景分析及代码实现
GG带着女朋友MM去游乐场游玩,游乐场项目众多,GG和MM可以任意选择项目玩,
这时候游乐园就是工厂,可以根据GG和MM的选择返回不同想游乐项目。
代码实现:
新建游乐场接口,抽象(Product)产品角色
/**
* 简单工厂模式
*/
public interface PlayProject {
/**
* 获取游乐项目信息
*/
void getPlayProjectInfo();
}
建立具体游乐项目:
旋转飞车
/**
* 旋转飞车
* @author other
* @since 2021/7/9 17:35
*/
public class CarPlay implements PlayProject{
@Override
public void getPlayProjectInfo() {
System.out.print("旋转飞车:\n");
System.out.print("票价:\n");
System.out.print(" 儿童:10/次 成人:15/次\n");
System.out.print("每次人数:20人\n");
System.out.print("\n");
System.out.print("\n");
}
}
海盗船
/**
* 海盗船
* @author other
* @since 2021/7/9 17:39
*/
public class ShipPlay implements PlayProject{
@Override
public void getPlayProjectInfo() {
System.out.print("海盗船:\n");
System.out.print("票价:\n");
System.out.print(" 儿童:8元/次 成人:12/次\n");
System.out.print("每次人数:30人\n");
System.out.print("\n");
System.out.print("\n");
}
}
惊悚谷
/**
* 惊悚谷
* @author other
* @since 2021/7/9 17:36
*/
public class ThrillerPlay implements PlayProject{
@Override
public void getPlayProjectInfo() {
System.out.print("惊悚谷:\n");
System.out.print("票价:\n");
System.out.print(" 儿童:限玩 成人:10/次\n");
System.out.print("每次人数:不限\n");
System.out.print("\n");
System.out.print("\n");
}
}
建立游乐项目工厂
/**
* 游玩项目工厂
*
* @author other
* @since 2021/7/10 9:49
*/
public class PlayProjectFactory {
private PlayProject project;
/**
* 根据景点字母编号编号获取娱乐游玩项目
* @param projectCode 景点字母编号编号
* @return 返回游玩项目对象
*/
public PlayProject getPlayProject(String projectCode) {
switch(projectCode.charAt(0))
{
case 'A'://旋转飞车
{
project = new CarPlay();
break;
}
case 'B'://海盗船
{
project = new ShipPlay ();
break;
}
case 'C'://惊悚谷
{
project = new ThrillerPlay();
break;
}
}
}
}
测试,获取游乐项目
public static void main(String[] args) {
// 简单工厂模式
PlayProjectFactory factory = new PlayProjectFactory();
// 旋转飞车
PlayProject playProject = factory.getPlayProject("A");
playProject.getPlayProjectInfo();
}