简单工厂模式

下班了,我们去食堂吃饭,食堂中有各色各样的菜色供大家选择,大家可以根据自己的口味选择不同的菜,而无论你选什么菜都是在这一个食堂被做出来的,这时候,“食堂”就是一个简单工厂。

UML图

简单工厂模式类图

从上图可以看出,工厂是具体的,Product是抽象的,里面的方法operation是virtual的,它的三个子类是具体的,子类中的operation覆盖父类的方法operation。
Factory能够根据客户的请求,生成不同的具体对象,这可以通过flag来标示。假定flag = 1时,生成ConcreteProduct1对象。

  1. 首先为所有产品定义一个共同的产品接口:
public interface Product {
    abstract public void operation();
}

2.让生产的所有产品都必须实现上面的接口

class Washer implements Product{
    public void operation() {
        // TODO Auto-generated method stub
        System.out.println("制造洗衣机");
    }
}
class Fridge implements Product{
    public void operation() {
        // TODO Auto-generated method stub
        System.out.println("制造冰箱");
    }
}
class AirConditioner implements Product{
    public void operation() {
        // TODO Auto-generated method stub
        System.out.println("制造空调");
    }
}

3.写一个工厂类,用来负责生产以上的产品

public class SimpleFactory {
    public static void createProduct(String productName) {
        if("Washer".equals(productName)){
            //生产洗衣机
            Washer washer = new Washer();
            washer.operation();
        }else if ("Fridge".equals(productName)) {
            //生产冰箱
            Fridge fridge = new Fridge();
            fridge.operation();
        }else if ("AirConditioner".equals(productName)) {
            //生产空调
            AirConditioner airConditioner = new AirConditioner();
            airConditioner.operation();
        }
    }
}

4.编写好工厂类之后就可以下单了

public static void main(String[] args) {
        SimpleFactory.createProduct("AirConditioner");
        SimpleFactory.createProduct("AirConditioner");
        SimpleFactory.createProduct("Washer");
        SimpleFactory.createProduct("Fridge");
        SimpleFactory.createProduct("Washer");
        SimpleFactory.createProduct("Fridge");
    }

由上面的代码可以看出,简单工厂的核心就是一个SimpleFactory类,他拥有必要的逻辑判断能力和所有产品的创建权利,我们只需要向把定单给他,就能得到我们想要的产品。这使用起来似乎非常方便。
但,实际上,这个SimpleFactory有很多的局限。首先,我们每次想要增加一种新产品的时候,都必须修改SimpleFactory的原代码。其次,当我们拥有很多很多产品的时候,而且产品之间又存在复杂的层次关系的时候,这个类必须拥有复杂的逻辑判断能力,其代码量也将不断地激增,这对以后的维护简直就是恐怖两个字…
还有就是,整个系统都严重依赖SimpleFactory类,只要SimpleFactory类一出问题,系统就进入不能工作的状态,这也是最为致命的一点….
以上的不足将在工厂模式的另外两种状态中得到解决。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值