工厂模式和策略模式

工厂模式和策略模式

相同点

都使用多态抽取了相同的行为,比如人类都有吃饭、睡觉行为。

相同片段

抽象类(接口)

写一个计算接口,里面抽取了计算功能。

public interface Counter {
    public double getResult(double num1, double num2);
}

各个运算类

加、减、乘、除类实现计算接口,重写各自的计算行为。

public class Add implements Counter {
    @Override
    public double getResult(double num1, double num2) {
        return num1 + num2;
    }
}
public class Sub implements Counter {
    @Override
    public double getResult(double num1, double num2) {
        return num1 - num2;
    }
}
public class Mul implements Counter {
    @Override
    public double getResult(double num1, double num2) {
        return num1 * num2;
    }
}
public class Div implements Counter {
    @Override
    public double getResult(double num1, double num2) {
        return num1 / num2;
    }
}

不同片段

工厂模式 -> 工厂类

工厂类用途是根据计算需求创建对象,我们可以用多个静态方法来实现,也可以使用方法传参来判断创建。

public class CountFactory {
    public static Counter getAdd() {
        return new Add();
    }

    public static Counter getSub() {
        return new Sub();
    }

    public static Counter getMul() {
        return new Mul();
    }

    public static Counter getDiv() {
        return new Div();
    }
}

策略模式 -> 上下文类

策略模式使用构造方法来接收对象,根据需求执行该对象方法。

public class Context {
    private Counter counter;

    public Context(Counter counter) {
        this.counter = counter;
    }

    public double executeCounter(double num1, double num2) {
        return counter.getResult(num1, num2);
    }
}

测试类

测试工厂模式和策略模式。

/**
 * @Description: 工厂测试
 * @auther: liucong
 * @date: 2020/8/14 10:02
 * @return: 
 */
@Test
public void test01() {
    Counter add = CountFactory.getAdd();
    System.out.println(add.getResult(1, 6));
}

/**
 * @Description: 策略测试
 * @auther: liucong
 * @date: 2020/8/14 10:02
 * @return: 
 */
@Test
public void test02() {
    Context context = new Context(new Add());
    System.out.println(context.executeCounter(3, 5));
}

结论

  • 工厂模式和策略模式都对各自操作类共性抽取;
  • 工厂模式工厂类侧重于对象的创建,方法的执行在测试类中调用;
  • 策略模式上下文类侧重于行为的调用,对象在上下文类中已创建好了。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值