栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

设计模式之工厂方法模式(创建者模式)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

设计模式之工厂方法模式(创建者模式)

设计模式遵循六大设计原则:

单一职责原则(一个类和方法只做一件事)里氏替换原则(多态,子类可扩展父类)依赖倒置原则(细节依赖抽象、下层依赖上层)接口隔离原则(建立单一接口)迪米特原则(最少知道,降低耦合)开闭原则(抽象架构、扩展实现)

工厂模式又称为工厂方法模式,是一种创建型设计模式。其在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型。主要意图是定义一个创建一个创建对象的接口,让其子类自己决定实例化哪一个工厂类。工厂模式使其创建过程延迟到子类进行。提供代码结构的扩展性,屏蔽每一个功能类中的具体实现逻辑。示例:方法奖品 代码实现

    定义发放奖品接口 ICommodity

    public interface ICommodity {
        
        void sendCommodity(String uId, String commondityId, String bizId, Map map) throws Exception;
    }
    
    

    定义商品发放服务

    public class CouponCommodityService implements ICommodity {
    
        private Logger logger = LoggerFactory.getLogger(CouponCommodityService.class);
    
        //模拟注入
        private CouponService couponService = new CouponService();
    
        
        @Override
        public void sendCommodity(String uId, String commondityId, String bizId, Map map) throws Exception {
            //调用服务进行发送
            couponService.sendCoupon(uId,commondityId,bizId);
    
            // 对发放结果进行处理
            System.out.println("发放完成给"+uId+"--"+commondityId);
        }
    }
    

    定义商品工厂

    public class StoreFactory {
    
        
        public ICommodity getCommodityService(Integer type) {
            if (null == type) {
                System.out.println("没有此商品发放服务");
                return null;
            } else if (1 == type) {
                System.out.println("获取到优惠券发放服务");
                return new CouponCommodityService();
            } else if (2 == type) {
                System.out.println("会员卡发放服务");
                return new CardCommodityService();
            }
            // 异常问题 应throw出去  让调用者自己处理
            return null;
        }
    
    }
    
 @Test
    public void testDesign01() throws Exception {

        // 注入发放服务工厂  获取相应的发放服务进行发放
        StoreFactory storeFactory = new StoreFactory();
        storeFactory.getCommodityService(1).sendCommodity("1","1","3",null);
    }

    结果

总结
    避免创建者与具体的产品逻辑耦合满足单一职责,每一个业务实现都在所属自己的类中完成满足开闭原则,无需更改使用调用方 就可以在程序中引入新的产品类型。但是商品众多的情况下,子类会极速扩张,因此需要与其他设计模式结合进行优化。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/736510.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号