zoukankan      html  css  js  c++  java
  • 设计模式之——工厂模式与策略模式

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

    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测试类
  • 相关阅读:
    SDL 开发实战(三):使用 SDL 绘制基本图形
    SDL 开发实战(二):SDL 2.0 核心 API 解析
    SDL 开发实战(一):SDL介绍及开发环境配置
    开源播放器 ijkplayer (六) :Android 下使用 ijkplayer 异常处理思路
    音视频编解码技术(二):AAC 音频编码技术
    FFmpeg开发实战(五):FFmpeg 抽取音视频的视频数据
    FFmpeg开发实战(四):FFmpeg 抽取音视频的音频数据
    FFmpeg开发实战(三):FFmpeg 打印音视频Meta信息
    FFmpeg开发实战(二):FFmpeg 文件操作
    FFmpeg开发实战(一):FFmpeg 打印日志
  • 原文地址:https://www.cnblogs.com/vincenshen/p/10925284.html
Copyright © 2011-2022 走看看