9 changed files with 360 additions and 0 deletions
@ -0,0 +1,47 @@ |
|||||||
|
/* |
||||||
|
* Copyright (C) 2023 niushuai233 niushuai.cc |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package cc.niushuai.demo.designpattern.creatormodel.factory._01; |
||||||
|
|
||||||
|
import cc.niushuai.demo.designpattern.creatormodel.factory._01.service.ClothService; |
||||||
|
import cc.niushuai.demo.designpattern.creatormodel.factory._01.service.FoodService; |
||||||
|
import cc.niushuai.demo.designpattern.creatormodel.factory._01.service.FruitService; |
||||||
|
import lombok.extern.slf4j.Slf4j; |
||||||
|
|
||||||
|
/** |
||||||
|
* goods factory |
||||||
|
* |
||||||
|
* @author niushuai233 |
||||||
|
* @date 2023/12/20 9:28 |
||||||
|
* @since 0.0.1 |
||||||
|
*/ |
||||||
|
@Slf4j |
||||||
|
public class GoodsFactory { |
||||||
|
|
||||||
|
public IGoodsService getGoodsService(Integer goodsType) { |
||||||
|
|
||||||
|
switch (goodsType) { |
||||||
|
case 1: |
||||||
|
return new ClothService(); |
||||||
|
case 2: |
||||||
|
return new FoodService(); |
||||||
|
case 3: |
||||||
|
return new FruitService(); |
||||||
|
} |
||||||
|
throw new RuntimeException("Bad goodsType value " + goodsType); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,34 @@ |
|||||||
|
/* |
||||||
|
* Copyright (C) 2023 niushuai233 niushuai.cc |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package cc.niushuai.demo.designpattern.creatormodel.factory._01; |
||||||
|
|
||||||
|
import cc.niushuai.demo.designpattern.creatormodel.factory._01.entity.GoodsReq; |
||||||
|
import cc.niushuai.demo.designpattern.creatormodel.factory._01.entity.GoodsResponse; |
||||||
|
|
||||||
|
/** |
||||||
|
* goods service interface
|
||||||
|
* |
||||||
|
* @author niushuai233 |
||||||
|
* @date 2023/12/20 9:51 |
||||||
|
* @since 0.0.1 |
||||||
|
*/ |
||||||
|
public interface IGoodsService { |
||||||
|
|
||||||
|
GoodsResponse sell(GoodsReq goodsReq); |
||||||
|
|
||||||
|
GoodsResponse buy(GoodsReq goodsReq); |
||||||
|
} |
@ -0,0 +1,37 @@ |
|||||||
|
/* |
||||||
|
* Copyright (C) 2023 niushuai233 niushuai.cc |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package cc.niushuai.demo.designpattern.creatormodel.factory._01.entity; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.math.BigDecimal; |
||||||
|
|
||||||
|
/** |
||||||
|
* 商品 request body |
||||||
|
* |
||||||
|
* @author niushuai233 |
||||||
|
* @date 2023/12/20 9:53 |
||||||
|
* @since 0.0.1 |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
public class GoodsReq { |
||||||
|
|
||||||
|
private String id; |
||||||
|
private String name; |
||||||
|
private Integer goodsType; |
||||||
|
private BigDecimal price; |
||||||
|
} |
@ -0,0 +1,34 @@ |
|||||||
|
/* |
||||||
|
* Copyright (C) 2023 niushuai233 niushuai.cc |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package cc.niushuai.demo.designpattern.creatormodel.factory._01.entity; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
/** |
||||||
|
* 商品 response body |
||||||
|
* |
||||||
|
* @author niushuai233 |
||||||
|
* @date 2023/12/20 9:55 |
||||||
|
* @since 0.0.1 |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
public class GoodsResponse { |
||||||
|
|
||||||
|
private Integer code; |
||||||
|
|
||||||
|
private String message; |
||||||
|
} |
@ -0,0 +1,49 @@ |
|||||||
|
/* |
||||||
|
* Copyright (C) 2023 niushuai233 niushuai.cc |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package cc.niushuai.demo.designpattern.creatormodel.factory._01.service; |
||||||
|
|
||||||
|
import cc.niushuai.demo.designpattern.creatormodel.factory._01.IGoodsService; |
||||||
|
import cc.niushuai.demo.designpattern.creatormodel.factory._01.entity.GoodsReq; |
||||||
|
import cc.niushuai.demo.designpattern.creatormodel.factory._01.entity.GoodsResponse; |
||||||
|
import cn.hutool.core.util.StrUtil; |
||||||
|
import lombok.extern.slf4j.Slf4j; |
||||||
|
|
||||||
|
/** |
||||||
|
* 衣服品类 |
||||||
|
* |
||||||
|
* @author niushuai233 |
||||||
|
* @date 2023/12/20 9:49 |
||||||
|
* @since 0.0.1 |
||||||
|
*/ |
||||||
|
@Slf4j |
||||||
|
public class ClothService implements IGoodsService { |
||||||
|
@Override |
||||||
|
public GoodsResponse sell(GoodsReq goodsReq) { |
||||||
|
GoodsResponse response = new GoodsResponse(); |
||||||
|
response.setCode(200); |
||||||
|
response.setMessage(StrUtil.format("之前买的一件{}衣服, 商品编号: {},不满意,又给卖了, 卖了¥{}", goodsReq.getName(), goodsReq.getId(), goodsReq.getPrice())); |
||||||
|
return response; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public GoodsResponse buy(GoodsReq goodsReq) { |
||||||
|
GoodsResponse response = new GoodsResponse(); |
||||||
|
response.setCode(200); |
||||||
|
response.setMessage(StrUtil.format("使用¥{} 买了一件{}衣服, 商品编号: {}", goodsReq.getPrice(), goodsReq.getName(), goodsReq.getId())); |
||||||
|
return response; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,47 @@ |
|||||||
|
/* |
||||||
|
* Copyright (C) 2023 niushuai233 niushuai.cc |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package cc.niushuai.demo.designpattern.creatormodel.factory._01.service; |
||||||
|
|
||||||
|
import cc.niushuai.demo.designpattern.creatormodel.factory._01.IGoodsService; |
||||||
|
import cc.niushuai.demo.designpattern.creatormodel.factory._01.entity.GoodsReq; |
||||||
|
import cc.niushuai.demo.designpattern.creatormodel.factory._01.entity.GoodsResponse; |
||||||
|
import cn.hutool.core.util.StrUtil; |
||||||
|
|
||||||
|
/** |
||||||
|
* 食物品类 |
||||||
|
* |
||||||
|
* @author niushuai233 |
||||||
|
* @date 2023/12/20 9:49 |
||||||
|
* @since 0.0.1 |
||||||
|
*/ |
||||||
|
public class FoodService implements IGoodsService { |
||||||
|
@Override |
||||||
|
public GoodsResponse sell(GoodsReq goodsReq) { |
||||||
|
GoodsResponse response = new GoodsResponse(); |
||||||
|
response.setCode(200); |
||||||
|
response.setMessage(StrUtil.format("之前买的一件{}食物, 商品编号: {},不满意,还没卖呢都吃完了", goodsReq.getName(), goodsReq.getId(), goodsReq.getPrice())); |
||||||
|
return response; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public GoodsResponse buy(GoodsReq goodsReq) { |
||||||
|
GoodsResponse response = new GoodsResponse(); |
||||||
|
response.setCode(200); |
||||||
|
response.setMessage(StrUtil.format("使用¥{} 买了一件{}食物, 商品编号: {}", goodsReq.getPrice(), goodsReq.getName(), goodsReq.getId())); |
||||||
|
return response; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,47 @@ |
|||||||
|
/* |
||||||
|
* Copyright (C) 2023 niushuai233 niushuai.cc |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package cc.niushuai.demo.designpattern.creatormodel.factory._01.service; |
||||||
|
|
||||||
|
import cc.niushuai.demo.designpattern.creatormodel.factory._01.IGoodsService; |
||||||
|
import cc.niushuai.demo.designpattern.creatormodel.factory._01.entity.GoodsReq; |
||||||
|
import cc.niushuai.demo.designpattern.creatormodel.factory._01.entity.GoodsResponse; |
||||||
|
import cn.hutool.core.util.StrUtil; |
||||||
|
|
||||||
|
/** |
||||||
|
* 水果品类 |
||||||
|
* |
||||||
|
* @author niushuai233 |
||||||
|
* @date 2023/12/20 9:51 |
||||||
|
* @since 0.0.1 |
||||||
|
*/ |
||||||
|
public class FruitService implements IGoodsService { |
||||||
|
@Override |
||||||
|
public GoodsResponse sell(GoodsReq goodsReq) { |
||||||
|
GoodsResponse response = new GoodsResponse(); |
||||||
|
response.setCode(200); |
||||||
|
response.setMessage(StrUtil.format("之前买的一件{}水果, 商品编号: {},不满意, 卖不出去了...", goodsReq.getName(), goodsReq.getId())); |
||||||
|
return response; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public GoodsResponse buy(GoodsReq goodsReq) { |
||||||
|
GoodsResponse response = new GoodsResponse(); |
||||||
|
response.setCode(200); |
||||||
|
response.setMessage(StrUtil.format("使用¥{} 买了一件{}水果, 商品编号: {}", goodsReq.getPrice(), goodsReq.getName(), goodsReq.getId())); |
||||||
|
return response; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,8 @@ |
|||||||
|
/** |
||||||
|
* 工厂模式 |
||||||
|
* |
||||||
|
* @author niushuai233 |
||||||
|
* @date 2023/12/20 11:41 |
||||||
|
* @since 0.0.1 |
||||||
|
*/ |
||||||
|
package cc.niushuai.demo.designpattern.creatormodel.factory; |
@ -0,0 +1,57 @@ |
|||||||
|
/* |
||||||
|
* Copyright (C) 2023 niushuai233 niushuai.cc |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package cc.niushuai.demo.designpattern.creatormodel.factory._01; |
||||||
|
|
||||||
|
import cc.niushuai.demo.designpattern.creatormodel.factory._01.entity.GoodsReq; |
||||||
|
import cn.hutool.core.util.IdUtil; |
||||||
|
import cn.hutool.core.util.RandomUtil; |
||||||
|
import lombok.extern.slf4j.Slf4j; |
||||||
|
import org.junit.jupiter.api.Test; |
||||||
|
|
||||||
|
/** |
||||||
|
* TODO |
||||||
|
* |
||||||
|
* @author niushuai233 |
||||||
|
* @date 2023/12/20 13:55 |
||||||
|
* @since 0.0.1 |
||||||
|
*/ |
||||||
|
@Slf4j |
||||||
|
public class GoodsFactoryTest { |
||||||
|
|
||||||
|
@Test |
||||||
|
public void testGoodsFactory() { |
||||||
|
|
||||||
|
GoodsReq clothReq = new GoodsReq(); |
||||||
|
clothReq.setGoodsType(1); |
||||||
|
clothReq.setName("皮草大衣"); |
||||||
|
clothReq.setPrice(RandomUtil.randomBigDecimal()); |
||||||
|
clothReq.setId(IdUtil.nanoId()); |
||||||
|
IGoodsService clothService = new GoodsFactory().getGoodsService(clothReq.getGoodsType()); |
||||||
|
log.info("{}", clothService.buy(clothReq)); |
||||||
|
log.info("{}", clothService.sell(clothReq)); |
||||||
|
|
||||||
|
GoodsReq foodReq = new GoodsReq(); |
||||||
|
foodReq.setGoodsType(2); |
||||||
|
foodReq.setName("面包"); |
||||||
|
foodReq.setPrice(RandomUtil.randomBigDecimal()); |
||||||
|
foodReq.setId(IdUtil.nanoId()); |
||||||
|
IGoodsService foodService = new GoodsFactory().getGoodsService(foodReq.getGoodsType()); |
||||||
|
log.info("{}", foodService.buy(foodReq)); |
||||||
|
log.info("{}", foodService.sell(foodReq)); |
||||||
|
|
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue