设计模式之简单工厂模式

设计模式中的工厂模式分为简单工厂模式,工厂方法模式和抽象工厂模式三种,其中简单工厂模式应用最多。与单例模式一样,工厂模式也是创建型模式,不同的是单例模式是让别的类只创建一个该类的实例,工厂模式则是将创建对象实例代码封装到一个工厂类中,别的类创建对象时调用工厂类创建即可,提高了代码的可扩展性,遵守ocp原则。

下面以披萨店为应用场景,模拟实现简单工厂模式。

Pizza.java

public abstract class Pizza {
    protected String name;

    public void setName(String name) {
        this.name = name;
    }

    public abstract void prepare();
    public void bake(){
        System.out.println(name+"正在烘焙....");
    }
    public void cut(){
        System.out.println(name+"正在切分....");
    }
    public void box(){
        System.out.println(name+"正在打包....");
    }
}

CheesePizza.java 

public class CheesePizza extends Pizza {
    @Override
    public void prepare() {
        System.out.println(name+"正在准备原料....");
    }
}

Pepper.java

public class Pepper extends Pizza {
    @Override
    public void prepare() {
        System.out.println(name+"正在准备原料....");
    }
}

以上三个类为披萨种类。

SimpleFactory.java
public class SimpleFactory {
    public Pizza createPizza(String orderType){
        Pizza pizza = null;
        if ("cheese".equals(orderType)){
            pizza = new CheesePizza();
            pizza.setName("奶酪披萨");
        }else if ("pepper".equals(orderType)){
            pizza = new Pepper();
            pizza.setName("胡椒披萨");
        }else {
            System.out.println("暂无此口味披萨上市!");
        }
        return pizza;
    }
}

此类为简单工厂类,所有创建披萨对象实例的操作调用此类中的createPizza方法完成。

Order.java
public class Order {
    SimpleFactory simpleFactory;
    public static void main(String[] args) {
        new Order(new SimpleFactory());
    }
    public Order(SimpleFactory simpleFactory){
        String orderType = null;
        this.simpleFactory= simpleFactory;
        do{
            orderType = getType();
            Pizza pizza = simpleFactory.createPizza(orderType);
            if (pizza != null){
                pizza.prepare();
                pizza.bake();
                pizza.cut();
                pizza.box();
            }else {
                break;
            }
        }while (true);
    }
    public String getType(){
        BufferedReader br =null;
        try {
            br = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("请输入披萨种类:");
            String s = br.readLine();
            return s;
        } catch (IOException e) {
            e.printStackTrace();
            return "";
        }

    }
}

Order类为出售披萨的店铺,并不“制造披萨”,SimpleFactory类中的createPizza方法制造披萨。

在使用简单工厂模式之后,当有了新的披萨种类时,只需添加新的披萨种类,修改简单工厂类中的一些代码即可,不用修改Order类中的代码,当有多个Order类,修改内容少,代码的可扩展性高,遵守ocp原则。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值