简单工厂和枚举

初学简单工厂和枚举的应用

注:所有设计模式翻译某位老师讲解的视频内容(个别内容不是 如:枚举)
重:单纯记录供自己使用
简单工厂首先将共性抽离出来生成超类接口用于被每个具体类实现,具体实现类实现超类方法。创建工厂类根据传入的枚举参数创建不同实现对象。

代码:
超类接口

/**
 * 饭店功能
 */
public interface Ifunction {

    //加水
    void water();
    //烹饪
    void cook();

}

创建实现类:

package practice;

/**
 * 米饭
 */
public class MFFactory implements  Ifunction{
    /**
     *米饭
     */
    @Override
    public void water() {
        System.out.println("煮米饭:添加水");
    }

    @Override
    public void cook() {
        System.out.println("煮米饭:开始烹饪");
    }
}

package practice;

/**
 * 炸鸡
 */
public class FriedChickenFactory implements Ifunction{

    @Override
    public void water() {
        System.out.println("炸鸡:添加水");
    }

    @Override
    public void cook() {
        System.out.println("炸鸡:开始烹饪");
    }


}

package practice;

/**
 * 炒菜
 */
public class AFriedDishFactory implements Ifunction{
    @Override
    public void water() {
        System.out.println("炒菜:添加水");
    }

    @Override
    public void cook() {
        System.out.println("炒菜:开始烹饪");
    }
}

创建枚举类:

package practice;

/**
 *  枚举类:参数常量
 */
public enum OrderDishes {
    aFriedDish("炒菜"),
    friedChicken("炸鸡"),
    mFFactory("米饭");

    //此处类型是什么则枚举参数是什么类型
    private String value;


    OrderDishes(String value) {
        this.value = value;
    }

    public String getValue() {
        return value;
    }

}

创建工厂类:

import practice.*;

/**
 * 工厂类
 *
 */

public class ClassFactory {

    /**
     * 厨房
     * 返回参数Ifunction 为所有时间的共性接口
     * @param dishes    传入参数为枚举类属性根据传入参数不同生产不同菜品
     * @return
     */
    public static Ifunction kitchen(OrderDishes dishes){
        switch (dishes){
                //炒菜
            case aFriedDish:
                return new AFriedDishFactory();
                //炸鸡
            case friedChicken:
                return new FriedChickenFactory();
                //米饭
            case mFFactory:
                return new MFFactory();
            default:
                return null;
        }
    }
}


调用:

import practice.OrderDishes;

public class Main {

    /**
     * 传入什么参数调用什么方法就可以炒什么菜
     * @param args
     */

    public static void main(String[] args) {

        //传入炒菜的enum值调用cook烹饪方法
        ClassFactory.kitchen(OrderDishes.aFriedDish).cook();
        //传入炸鸡的enum值调用cook烹饪方法
        ClassFactory.kitchen(OrderDishes.friedChicken).cook();

    }
}

猜你喜欢

转载自blog.csdn.net/weixin_42563880/article/details/89457072
今日推荐