设计模式遵循六大设计原则:
单一职责原则(一个类和方法只做一件事)里氏替换原则(多态,子类可扩展父类)依赖倒置原则(细节依赖抽象、下层依赖上层)接口隔离原则(建立单一接口)迪米特原则(最少知道,降低耦合)开闭原则(抽象架构、扩展实现)
工厂模式又称为工厂方法模式,是一种创建型设计模式。其在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型。主要意图是定义一个创建一个创建对象的接口,让其子类自己决定实例化哪一个工厂类。工厂模式使其创建过程延迟到子类进行。提供代码结构的扩展性,屏蔽每一个功能类中的具体实现逻辑。示例:方法奖品 代码实现
定义发放奖品接口 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);
}
- 结果
- 避免创建者与具体的产品逻辑耦合满足单一职责,每一个业务实现都在所属自己的类中完成满足开闭原则,无需更改使用调用方 就可以在程序中引入新的产品类型。但是商品众多的情况下,子类会极速扩张,因此需要与其他设计模式结合进行优化。



