web框架中用到的设计模式专题

设计模式之三种工厂模式

2019-06-17  本文已影响0人  先生zeng

今天接着更新工厂模式。概念性的东西因为我书里的笔记还在宿舍,所以先把代码贴一下。我自己又重温了一遍工厂模式的学习。

首先是最简单的简单工厂模式

这是用IDEA生成的类图
代码如下:

工厂类:

/**
 * @version 2019/1/21
 * @description: 工厂,给我产品名,我就自己去生产这个产品
 * @since 2019/1/21
 */
public class CreatorFactory {
    
    public static FruitProduct createFruit(String which) throws NoSuchFruitException {
        if(which.equalsIgnoreCase("grape")){
            return new Grape();
        }else if(which.equalsIgnoreCase("apple")){
            return new Apple();
        }else{
           throw  new NoSuchFruitException("没有找到该产品类,进行生产");
        }
    }
}

产品继承的抽象类

/**
 * @version 2019/1/21
 * @description:产品继承的抽象类
 * @since 2019/1/21
 */
public interface FruitProduct {
    /** 种植 */
     void plant();

    /** 浇水、施肥  */
     void grow();

    /** 收获 */
    void harvest();
}

接下来是选水果中的其中一个产品:

/**
 * @version 2019/1/21
 * @description:苹果类
 * @since 2019/1/21
 */
public class Apple implements FruitProduct {

    //构造器
    public Apple() {
        plant();
        grow();
        harvest();
    }
    /**
     * description: 种植
     * @date 2019/1/21 17:03
     * @param: []
     * @return void
     **/
    @Override
    public void plant() {
        System.out.println("播种苹果种子");
    }
    /**
     * description:生长
     * @date 2019/1/21 17:03
     * @param: []
     * @return void
     **/
    @Override
    public void grow() {
        System.out.println("苹果正在茁壮成长。。。。");
    }
/**
 * description: 收获
 * @author 曾鑫曜 (xinyao.zeng@ucarinc.com)
 * @date 2019/1/21 17:03
 * @param: []
 * @return void
 **/
    @Override
    public void harvest() {
        System.out.println("苹果成熟了,可以收获了!!!");
    }
}

测试类:

public class TestStaticFactory1 {

    public static void main(String[] args) throws NoSuchFruitException {
      /** 调用工厂生产苹果*/
        CreatorFactory.createFruit("apple");
      /**  调用工厂生产葡萄 */
        CreatorFactory.createFruit("grape");
        /**  调用工厂生产不存在的水果,报异常 */
        CreatorFactory.createFruit("gr22ape");
    }
}

结果演示:


image.png

接着是工厂方法模式:

代码类图解:

代码演示:
生产水果的抽象工厂接口

public interface FruitFactory {
    public FruitProduct createFruit();
}

同样需要一个产品共同的抽象(同上)

public interface FruitProduct {
    /** 种植 */
     void plant();

    /** 浇水、施肥  */
     void grow();

    /** 收获 */
    void harvest();
}

提供一个专门生产类:

public class GrapeCreate implements FruitFactory {
    @Override
    public FruitProduct createFruit() {
        return new Grape();
    }
}

public class AppleCreate implements FruitFactory {
    @Override
    public FruitProduct createFruit() {
        return new Apple();
    }

测试类:

public class TestFactoryMethod {

    private static FruitFactory appleCreate,grapeCreate;

    private static FruitProduct apple,grape;

    public static void main(String[] args) {

        appleCreate=new AppleCreate();
        grapeCreate=new GrapeCreate();

        apple=appleCreate.createFruit();
        System.out.println("");
        grape=grapeCreate.createFruit();
    }
}
image.png

抽象工厂模式:

类图:

代码如下:
待续。。。。

上一篇 下一篇

猜你喜欢

热点阅读