工厂模式

参考博客来源:https://www.jianshu.com/p/d951ac56136e
我们常说的工厂模式,在网上我们常见的资料是常见的三种模式
简单工厂模式
工厂方法模式
抽象工厂模式
下面我们具体的实现我们上面说的这三种模式以及他们的区别于共同点了
简单工厂模式:就是在调用工厂类的方法时,根据传参的条件可以生产出具体的产品类来,主要的特点就是根据不同的条件具体生产出不同的产品类型
在下面的代码中具体的角色有三个
抽象产品
具体产品
工厂
代码如下:

/**
 * @Author: Jason
 * @Create: 2019/12/22  18:38
 * @Description 工厂模式中的抽象产品类
 抽象产品
 */
public abstract  class Product {

    /**
     * 提供一个生产抽象产品的方法
     */
    public abstract  void intro();
}

//下面的两个类都是属于具体产品
/**
 * @Author: Jason
 * @Create: 2019/12/22  18:41
 * @Description 食品-牛肉产品
 */
public class FoodProduct  extends Product {

    @Override
    public void intro() {
        System.out.println("这是生产牛肉的");
    }
}

/**
 * @Author: Jason
 * @Create: 2019/12/22  18:42
 * @Description 猪肉生产类
 */
public class PigProduct  extends Product {

    @Override
    public void intro() {
        System.out.println("这是生产猪肉的");
    }
}


/**
 * @Author: Jason
 * @Create: 2019/12/22  18:44
 * @Description 工厂只是提供生产类
 工厂类,根据不同的入参参数生产出具体的类型
 */
public class FoodFactory {

    //提供一个对外开放的方法来生产类
    public  static Product  getInstance(String str){
        switch (str){
            case "food":
                return new FoodProduct();
            case "pig":
                return new PigProduct();
            default:
                return  null;
        }
    }
}

工厂模式中其实就是我们常说的工厂模式:也就是说如果你需要生产一个产品,那必须同时购买生产产品的工厂
在这里面主要有四个概念:
抽象产品:
具体产品:
抽象工厂:
具体工厂:
具体的代码如下:

/**
 * @Author: Jason
 * @Create: 2019/12/22  18:44
 * @Description 工厂只是提供生产类
 */
public abstract class FoodFactory {

    /**
     * 只是负责生产具体的猪肉
     * @return
     */
   abstract Product  getInstance();
}



/**
 * @Author: Jason
 * @Create: 2019/12/22  19:03
 * @Description 猪肉工厂
 */
public class PigFactory extends  FoodFactory{

    @Override
    Product getInstance() {
        return new PigProduct();
    }
}



/**
 * @Author: Jason
 * @Create: 2019/12/22  18:41
 * @Description 食品-牛肉产品
 */
public class FoodProduct  extends Product {

    @Override
    public void intro() {
        System.out.println("这是生产牛肉的");
    }
}

//总结我们能够看出:相比较简单工厂模式而言,工厂方法就是一个工厂只能生产一类的食品类型

抽象工厂模式:根据具体的工厂可以生产出不同的产品,这也是包括一些相同系列的产品
关键的几个概念:
抽象产品
具体产品
抽象工厂
具体工厂:
产品系列类:
具体的代码如下:

/**
 * @Author: Jason
 * @Create: 2019/12/22  18:42
 * @Description 猪肉生产类
 */
public abstract class PigProduct  extends Product {

    @Override
    public abstract void intro();
}


/**
 * @Author: Jason
 * @Create: 2019/12/22  18:41
 * @Description 食品-牛肉产品-再次抽象
 */
public abstract class FoodProduct  extends Product {

    @Override
    public abstract void intro();

}


/**
 * @Author: Jason
 * @Create: 2019/12/22  19:24
 * @Description 黄牛产品-具体产品
 */
public class YellowBeer extends FoodProduct {

    @Override
    public void intro() {
        System.out.println("这是黄牛产品");
    }
}


/**
 * @Author: Jason
 * @Create: 2019/12/22  19:25
 * @Description 黑猪产品
 */
public class BlackPigProduct extends PigProduct {
    @Override
    public void intro() {
        System.out.println("这是黑猪产品");
    }
}

/**
 * @Author: Jason
 * @Create: 2019/12/22  18:44
 * @Description 工厂只是提供生产类
 */
public abstract class FoodFactory {

    /**
     * 只是负责生产具体的猪肉
     * @return
     */
   abstract Product  getInstance();


    /**
     * 负责生产具体的牛肉
     */
    abstract  Product  getBeer();
}



/**
 * @Author: Jason
 * @Create: 2019/12/22  19:06
 * @Description 牛肉
 */
public class BeerFactory extends FoodFactory {


    @Override
    Product getInstance() {
        return new YellowBeer();
    }

    @Override
    Product getBeer() {
        return new BlackPigProduct();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值