初学简单工厂和枚举的应用
注:所有设计模式翻译某位老师讲解的视频内容(个别内容不是 如:枚举)
重:单纯记录供自己使用
简单工厂首先将共性抽离出来生成超类接口用于被每个具体类实现,具体实现类实现超类方法。创建工厂类根据传入的枚举参数创建不同实现对象。
代码:
超类接口
/**
* 饭店功能
*/
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();
}
}