设计模式之简单工厂模式

简单工厂UML类图

JdHK6s.png

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();
    }
}

简单工厂方式

  • 优点:
  • 缺点:

Search

    Table of Contents