示例:代码
package com.jareny.jave.design.factory.object;
public interface Product {
String getName();
}
示例:代码
package com.jareny.jave.design.factory.object;
public class Fruit implements Product {
private final ProductCategoryEnum categoryEnum = ProductCategoryEnum.FRUIT;
@Override
public String getName() {
return categoryEnum.getGategoryName();
}
}
示例:代码
package com.jareny.jave.design.factory.object;
public class Clothes implements Product {
private final ProductCategoryEnum categoryEnum = ProductCategoryEnum.CLOTHES;
@Override
public String getName() {
return categoryEnum.getGategoryName();
}
}
示例:代码
package com.jareny.jave.design.factory.object;
public class Computer implements Product {
private final ProductCategoryEnum categoryEnum = ProductCategoryEnum.COMPUTER;
@Override
public String getName() {
return categoryEnum.getGategoryName();
}
}
示例:代码
package com.jareny.jave.design.factory.object;
public class Phones implements Product {
private final ProductCategoryEnum categoryEnum = ProductCategoryEnum.PHONES;
@Override
public String getName() {
return categoryEnum.getGategoryName();
}
}
示例:代码
package com.jareny.jave.design.factory.object;
public class Vegetable implements Product {
private final ProductCategoryEnum categoryEnum = ProductCategoryEnum.VEGETABLES;
@Override
public String getName() {
return categoryEnum.getGategoryName();
}
}
package com.jareny.jave.design.factory.object;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 分类一级标题
*/
@Getter
@AllArgsConstructor
public enum ProductCategoryEnum {
// 蔬菜
VEGETABLES("蔬菜", 1){
@Override
public Product createProduct(){
return new Vegetable();
}
},
FRUIT("水果", 1){
@Override
public Product createProduct(){
return new Fruit();
}
},
COMPUTER("电脑", 1){
@Override
public Product createProduct(){
return new Computer();
}
},
PHONES("手机", 1){
@Override
public Product createProduct(){
return new Phones();
}
},
CLOTHES("衣服", 1){
@Override
public Product createProduct(){
return new Vegetable();
}
}
;
// 描述
private final String gategoryName;
// 层级
private final Integer level;
public abstract Product createProduct();
}
package com.jareny.jave.design.factory.function;
import com.jareny.jave.design.factory.object.Product;
import com.jareny.jave.design.factory.object.ProductCategoryEnum;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* 工厂模式
*/
public class ProductFactory {
public final static Map productMap = Stream.of(ProductCategoryEnum.values())
.collect(Collectors.toMap(ProductCategoryEnum::name, ProductCategoryEnum::createProduct));
public static void main(String[] args) {
// 从工厂 获取数据
Product product = productMap.get(ProductCategoryEnum.VEGETABLES.name());
System.out.println(product.toString());
// 打印所有的产品
for (Map.Entry item : productMap.entrySet()) {
System.out.println(item.getKey()+":"+item.getValue().getName());
}
}
}
COMPUTER:电脑
FRUIT:水果
CLOTHES:蔬菜
PHONES:手机
VEGETABLES:蔬菜
以上就是今天要讲的内容,本文使用枚举方式来生产和维护工厂模式生产的对象,在枚举中定义一个生产对象的抽象接口,然后每一个枚举类去实现这个抽象接口来生产一个对象,通过枚举的方式将产品的实现类都注入到工厂类的容器中,然后容器中根据类型来获取对应的产品。