设计模式之——工厂模式与策略模式

博客介绍了工厂模式和策略模式。工厂模式关注创建对象结果,可动态决定实例化类,有简单、方法、抽象三种形态;策略模式关注创建对象过程,定义算法家族并封装,让算法可相互替换,包含抽象策略、具体策略、环境类三个角色。

工厂模式关注的是创建对象的结果,策略模式关注的是创建对象的过程。

1、工厂模式

介绍

  专门负责将大量有共同接口的类实例化,工厂模式可以动态的决定将哪一个类进行实例化,不必事先知道要实例化那一个类。

工厂模式的3中形态

  简单工厂模式,又称为静态工厂方法模式。

  工厂方法模式,又称为多态性工厂模式。

  抽象工厂模式,又称为工具箱模式。

示例代码
package main;

public interface Operation {

    int operate(int num1, int num2);
}
Operation接口
package main.Impl;

import main.Operation;

public class AddOperation implements Operation {

    @Override
    public int operate(int num1, int num2) {
        return num1 + num2;
    }
}
AddOperation实现类
package main.Impl;

import main.Operation;

public class MultiOperation implements Operation {
    @Override
    public int operate(int num1, int num2) {
        return num1 * num2;
    }
}
MultiOperation实现类
package main;

public enum OperationEnum {
    Add, MINUS, MULTI, DIVIDE;
}
OperationEnum枚举
public class FactoryUtils {

    public static Operation createOperation(OperationEnum operationEnum){

        switch (operationEnum){
            case Add:
                return new AddOperation();
         
            case MULTI:
                return new MultiOperation();
           
        }
        return null;
    }
}
FactoryUtils简单工厂
public class OperationTest {

    public static void main(String[] args){
        int num1 = 100;
        int num2 = 200;

        Operation addOperation = FactoryUtils.createOperation(OperationEnum.Add);
        int addResult = addOperation.operate(num1, num2);
        System.out.println("args = [" + addResult + "]");

        Operation multiOperation = FactoryUtils.createOperation(OperationEnum.MULTI);
        int multiResult = multiOperation.operate(num1, num2);
        System.out.println("args = [" + multiResult + "]");
    }
}
OperationTest测试类

2、策略模式

介绍

  策略模式定义了算法家族,分别封装起来,让他们之间可以相互替换;此模式让算法的变化,不会影响到使用算法的客户。

策略模式三个角色

  抽象策略,定义个抽象类或接口,并个给出具体策略的接口。

  具体策略,抽象策略的实现类,具体实现了相关的算法和行为。

  环境类,持有一个策略的引用。

示例代码
package main;

public interface OperationStrategy {

    int operate(int num1, int num2);
}
OperationStrategy策略接口
package main.Impl;

import main.OperationStrategy;

public class AddStrategy implements OperationStrategy {

    @Override
    public int operate(int num1, int num2) {
        return num1 + num2;
    }
}
AddStrategy实现类
package main.Impl;

import main.OperationStrategy;

public class SubstractionStrategy implements OperationStrategy {

    @Override
    public int operate(int num1, int num2) {
        return num1 - num2;
    }
}
SubstractionStrategy实现类
package test;

import main.Impl.AddStrategy;
import main.Impl.OperationContext;
import main.Impl.SubstractionStrategy;

public class StrategyTest {

    public static void main(String[] args){
        OperationContext addContext = new OperationContext(new AddStrategy());
        addContext.executeOperate(100, 200);

        OperationContext subContext = new OperationContext(new SubstractionStrategy());
        subContext.executeOperate(100, 200);
    }
}
StrategyTest测试类
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值