工厂模式

简单工厂模式

class SimplePizzaFactory{
    public Pizza createPizza() {
        return new Pizza();
    }
}

这便是最简单的工厂模式,可以将这个返回对象的方法设置为static的,常称为静态工厂方法(通常都设置为静态的)。

简单工厂模式实际上并不是真正意义上的工厂模式。

真正的工厂模式

工厂方法

通过让子类决定该创建对象是什么,来达到将对象创建的过程封装的目的。

创建对象的是一个方法,这个创建对象的方法在父类中是一个抽象方法,需要子类覆盖具体实现创建什么对象。

abstract class PizzaStore{
    // 订单方法,子类都需要使用该方法
    public Pizza orderPizza(String type){
        Pizza pizza = createPizza(type); 

        pizza.prepare();
        pizza.bake();
        pizza.cut();
        pizza.box();
        return pizza;
    }
    // 工厂方法,创建对象交给该方法
    protected abstract Pizza createPizza(String type);
}

这个抽象类中有一个抽象方法Pizza createPizza(String type);将对象创建的工作交给这个抽象方法,接下来具体的Pizza店可以根据自己做的Pizza来创建自己的Pizza,并且可以使用不用变化的订单方法orderPizza。这样就达到了:让子类决定该创建对象是什么,这也是工厂模式的核心。

抽象工厂

提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

抽象工厂也就是建立一个抽象类或者接口,里边包含同一类型的类的创建,使用具体的类实现接口中的这些方法,创建对应类。

抽象工厂与工厂方法相比优点:就是可以把一群相关的产品集合起来。

// 这个接口的作用就是用来提供创建一个产品家族的抽象类型,
// 这个类型的子类定义了产品被生产的方法
interface PizzaIngredientFactory{
    public Dough createDough();
    public Sauce createSauce();
    public Cheese createCheese();
}

class NYFactory implements PizzaIngredientFactory{
    // 实现接口的具体方法,这里只写了一个
    public Dough createDough(){
        return new Dough();
    }
    ...
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值