嘿!策略模式和工厂模式的区别你知道吗?

简介: 嘿!策略模式和工厂模式的区别你知道吗?
设计模式,是一个程序员修炼的毕竟之路,但是,他是一种思想,思想这东西,这可意会。我之前理解的设计模式更倾注在实现上,而且我经常疑惑工厂和策略不都是得到具体的实现然后调用实现的接口吗?有什么不同。

一 工厂模式

工厂模式是一个创建形模式,他最终是要创建出一个我们要的那个实现,比如一个工厂类,工厂类中的工厂方法只返回了我们要的对象而已

二 策略模式

策略模式,他是一个行为型的设计模式,怎么理解这个行为型呢?来上代码


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将类型和实例映射起来,原来是省略了这部分。

相关文章
|
6月前
|
设计模式 算法 Java
工厂模式、模板模式和策略模式的混合使用
工厂模式又叫做工厂方法模式,是一种**创建型**设计模式,一般是在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型。
99 0
工厂模式、模板模式和策略模式的混合使用
|
设计模式 uml 微服务
个人理解简单工厂模式和策略模式的区别
个人理解简单工厂模式和策略模式的区别
113 1
|
3月前
|
设计模式 算法
工厂模式与策略模式的区别
【8月更文挑战第22天】
42 2
工厂模式与策略模式的区别
|
5月前
|
设计模式 Oracle Java
工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。
【6月更文挑战第20天】工厂模式简化对象创建,根据参数或条件生成MySQL或Oracle数据库连接。`DatabaseConnectionFactory`作为工厂,动态返回具体连接类型。装饰器模式则用于运行时动态增加对象功能,如`LoggingDecorator`为`Runnable`对象添加日志记录,保持代码整洁。在`Main`类中展示了如何使用这两种模式。
42 6
|
6月前
|
设计模式 算法
设计模式思考,简单工厂模式和策略模式的区别?
设计模式思考,简单工厂模式和策略模式的区别?
|
6月前
|
算法 数据安全/隐私保护
行为型 策略模式
行为型 策略模式
35 1
|
6月前
|
设计模式 算法
设计模式--策略模式(由简单工厂到策略模式到两者结合图文详解+总结提升)
设计模式--策略模式(由简单工厂到策略模式到两者结合图文详解+总结提升)
|
设计模式
设计模式之抽象工厂和工厂方法的异同点
设计模式之抽象工厂和工厂方法的异同点
|
设计模式
设计模式——对象创建模式之工厂模式
通过“对象创建”模式绕开new,来避免对象创建(new)过程中所导致的紧耦合(依赖具体类),从而支持对象创建的稳定。它是接口抽象之后的第一步工作。
75 0
|
存储 设计模式 监控