简单工厂UML类图
Pizza 抽象类
public abstract class Pizza {
private String name;
/**
* 准备原材料可能不同 给子类自己实现
*/
public abstract void prepare();
public void bake(){
System.out.println(name + "baking;");
}
public void cut(){
System.out.println(name + "cuting;");
}
public void box(){
System.out.println(name + "boxing;");
}
public void setName(String name) {
this.name = name;
}
}
GreekPizza 希腊Pizza
public class GreekPizza extends Pizza {
@Override
public void prepare() {
System.out.println("准备greek 披萨");
}
}
ChessePizza 类
public class ChessePizza extends Pizza {
@Override
public void prepare() {
System.out.println("chessePizza");
}
}
简单工厂类SimpleFactory 用于创建Pizza对象
public class SimpleFactory {
/**
* 根据类型返回一个Pizza对象
* @param orderType
* @return
*/
public Pizza createPizza(String orderType){
Pizza pizza = null;
if (orderType.equals("greek")){
pizza = new GreekPizza();
pizza.setName("greek");
}else if(orderType.equals("cheese")){
pizza = new ChessePizza();
pizza.setName("cheese");
}
return pizza;
}
public static Pizza createStaticPizza(String orderType){
Pizza pizza = null;
if (orderType.equals("greek")){
pizza = new GreekPizza();
pizza.setName("greek");
}else if(orderType.equals("cheese")){
pizza = new ChessePizza();
pizza.setName("cheese");
}
return pizza;
}
}
订购Pizza类
public class OrderPizza {
private SimpleFactory simpleFactory;
private Pizza pizza;
public OrderPizza(SimpleFactory simpleFactory){
this.simpleFactory = simpleFactory;
setSimpleFactory(simpleFactory);
}
public void setSimpleFactory(SimpleFactory simpleFactory) {
do {
String orderType = getType();
pizza = simpleFactory.createPizza(orderType);
if (Objects.nonNull(pizza)){
pizza.bake();
pizza.cut();
pizza.box();
}else{
System.out.println("披萨订购失败");
break;
}
}while (true);
}
public String getType(){
System.out.println("请输入你要进行订购的披萨类型:");
Scanner scanner = new Scanner(System.in);
return scanner.nextLine();
}
public static void main(String[] args) {
new OrderPizza(new SimpleFactory());
}
}
静态调用方式
public class OrderStaticPizza {
public OrderStaticPizza(){
do {
String orderType = getType();
Pizza pizza = SimpleFactory.createStaticPizza(orderType);
if (Objects.nonNull(pizza)){
pizza.bake();
pizza.cut();
pizza.box();
}else{
System.out.println("披萨订购失败");
break;
}
}while (true);
}
public String getType(){
System.out.println("请输入你要进行订购的披萨类型:");
Scanner scanner = new Scanner(System.in);
return scanner.nextLine();
}
public static void main(String[] args) {
new OrderStaticPizza();
}
}
简单工厂方式
- 优点:
- 缺点: