设计模式,是一个程序员修炼的毕竟之路,但是,他是一种思想,思想这东西,这可意会。我之前理解的设计模式更倾注在实现上,而且我经常疑惑工厂和策略不都是得到具体的实现然后调用实现的接口吗?有什么不同。
一 工厂模式
工厂模式是一个创建形模式,他最终是要创建出一个我们要的那个实现,比如一个工厂类,工厂类中的工厂方法只返回了我们要的对象而已
二 策略模式
策略模式,他是一个行为型的设计模式,怎么理解这个行为型呢?来上代码
public class Context<T> {
private ICouponDiscount<T> couponDiscount;
public Context(ICouponDiscount<T> couponDiscount) {
this.couponDiscount = couponDiscount;
}
public BigDecimal discountAmount(T couponInfo, BigDecimal skuPrice) {
return couponDiscount.discountAmount(couponInfo, skuPrice);
}}
这个类就是策略模式的策略类,我们传入的是我们的实例,而返回的是具体实例的具体方法,注意,这时,我们的焦点已经不是创建一个实例了,我们要的是实例对应的实现。
其中这两个设计模式最重要的一个是工厂类,一个是策略类,工厂模式说,不关心具体的实现,将创建对象和这个对象干什么进行了一个分离,这就要需要依赖工厂类,而策略模式,根据传入的对象,去确定对象执行哪一种行为,这就需要策略类。那策略模式有啥有点呢,在网上查,大多数都是,他能够干掉大多数的if else,那怎么干掉,这个也是困惑了我很久,上代码
Context<Double> context = new Context<Double>(new ZJCouponDiscount());
BigDecimal discountAmount = context.discountAmount(10D, new BigDecimal(100));
logger.info("测试结果:直减优惠后金额 {}", discountAmount);
这么来看 if else是没有了,但是,那时直接传了实例呀,至于用什么实例不还要要if判断出来吗?终于在今天我悟到了,不用if 判断,直接用map将类型和实例映射起来,原来是省略了这部分。