Java设计模式-简单工厂

简述

举例:生产不同口味Pizza
在这里插入图片描述

优缺点

优点

  • 创建对象方便。根据关键字(比如一个字符串)就可以创建一个对象
  • 扩展性高。增加一个具体类即增加一个产品
  • 封装性。屏蔽产品实现

缺点

  • 每增加一个产品,都需要增加一个具体类和修改工厂工厂,类数不断增加,在一定程度上增加了系统的复杂度

代码

Pizza

package com.ydfind.gof.factory;

/**
 * 制作pizza 接口
 * @author ydfind
 * @date 2019.10.14
 */
public interface Pizza {

    /**
     * 准备
     */
    void prepare();

    /**
     * 烘烤
     */
    void bake();

    /**
     * 切片
     */
    void cut();

    /**
     * 装盒
     */
    void box();
}

CheesePizza

package com.ydfind.gof.factory;

/**
 * 奶酪Pizza
 * @author ydfind
 * @date 2019.10.14
 */
public class CheesePizza implements Pizza {

    @Override
    public void prepare() {
        System.out.println("这是一个奶酪Pizza");
    }

    @Override
    public void bake() {

    }

    @Override
    public void cut() {

    }

    @Override
    public void box() {

    }
}

VeggiePizza

package com.ydfind.gof.factory;

/**
 * 素食Pizza
 * @author ydfind
 * @date 2019.10.14
 */
public class VeggiePizza implements Pizza {

    @Override
    public void prepare() {
        System.out.println("这是一个素食Pizza");
    }

    @Override
    public void bake() {

    }

    @Override
    public void cut() {

    }

    @Override
    public void box() {

    }
}

SimplePizzaFactory

package com.ydfind.gof.factory;
/**
 * 简单Pizza工厂
 * @author ydfind
 * @date 2019.10.14
 */
public class SimplePizzaFactory {

    public static final String CHEESE_PIZZA = "奶酪Pizza";
    public static final String VEGGIE_PIZZA = "素食Pizza";

    /*******************************静态工厂,缺点:无法通过继承来修改创建行为************************************/
    /**
     * 根据关键字创建对象
     */
    public static Pizza createPizza(String type){
        switch (type){
            case CHEESE_PIZZA:
                return new CheesePizza();
            case VEGGIE_PIZZA:
                return new VeggiePizza();
            default:
                return null;
        }
    }
}

使用示例

PizzaStore

package com.ydfind.gof.factory;

/**
 * Pizza店
 * @author ydfind
 * @date 2019.10.25
 */
public class PizzaStore {

    public Pizza orderPizza(String type){
        Pizza pizza;

        pizza = SimplePizzaFactory.createPizza(type);

        pizza.prepare();
        pizza.bake();
        pizza.cut();
        pizza.box();
        return pizza;
    }
}

测试

/**
* 简单工厂模式 测试:Pizza.java、CheesePizza.java、VeggiePizza.java、SimplePizzaFactory.java
*/
@Test
public void testSimpleFactory(){
   System.out.println("*********************简单工厂 测试********************************");
   PizzaStore pizzaStore = new PizzaStore();
   // pizza店制作两个pizza
   pizzaStore.orderPizza(SimplePizzaFactory.CHEESE_PIZZA);
   pizzaStore.orderPizza(SimplePizzaFactory.VEGGIE_PIZZA);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值