首页 > 其他分享 >05-工厂模式与简单工厂模式

05-工厂模式与简单工厂模式

时间:2023-01-18 10:22:35浏览次数:60  
标签:01 since 05 18 gof 模式 工厂 Operation public

05-工厂模式与简单工厂模式

简单工厂模式

计算器实现

package com.gof.simpleFactory;

/**
 * 功能描述
 *
 * @since 2023-01-18
 */
public abstract class Operation {
    private double num1;

    private double num2;

    public Operation() {
    }

    public double getNum1() {
        return num1;
    }

    public void setNum1(double num1) {
        this.num1 = num1;
    }

    public double getNum2() {
        return num2;
    }

    public void setNum2(double num2) {
        this.num2 = num2;
    }

    public abstract void getResult();
}
package com.gof.simpleFactory;

/**
 * 功能描述
 *
 * @since 2023-01-18
 */
public class AddOperation extends Operation {

    @Override
    public void getResult() {
        System.out.println(getNum1() + getNum2());
    }
}
package com.gof.simpleFactory;

/**
 * 功能描述
 *
 * @since 2023-01-18
 */
public class SubtractOperation extends Operation {
    @Override
    public void getResult() {
        System.out.println(getNum1() - getNum2());
    }
}
package com.gof.simpleFactory;

/**
 * 功能描述
 *
 * @since 2023-01-18
 */
public class MultiplyOperation extends Operation {
    @Override
    public void getResult() {
        System.out.println(getNum1() * getNum2());
    }
}
package com.gof.simpleFactory;

/**
 * 功能描述
 *
 * @since 2023-01-18
 */
public class DivideOperation extends Operation {
    @Override
    public void getResult() {
        if (getNum2() == 0) {
            System.out.println("wrong num2");
        } else {
            System.out.println(getNum1() / getNum2());
        }
    }
}

简单工厂

package com.gof.simpleFactory;

/**
 * 功能描述
 *
 * @since 2023-01-18
 */
public class OpeationFactory {
    private static Operation operation;

    public static Operation operate(String operator) {
        switch (operator) {
            case "+":
                operation = new AddOperation();
                break;
            case "-":
                operation = new SubtractOperation();
                break;
            case "*":
                operation = new MultiplyOperation();
                break;
            case "/":
                operation = new DivideOperation();
                break;
        }
        return operation;
    }
}

客户端

package com.gof.simpleFactory;

/**
 * 功能描述
 *
 * @since 2023-01-18
 */
public class Client {
    public static void main(String[] args) {
        Operation operate = OpeationFactory.operate("-");
        operate.setNum1(234);
        operate.setNum2(1);
        operate.getResult();
    }
}

工厂模式

工厂模式相较与简单工厂模式,仅针对简单工厂的代码及客户端的代码进行改进
一个工厂接口和4个工厂类

package com.gof.factory;

/**
 * 功能描述
 *
 * @since 2023-01-18
 */
public interface OperationFactory {

    Operation createOperation();

}

package com.gof.factory;

/**
 * 功能描述
 *
 * @since 2023-01-18
 */
public class AddFactory implements OperationFactory {

    @Override
    public Operation createOperation() {
        return new AddOperation();
    }
}

package com.gof.factory;

/**
 * 功能描述
 *
 * @since 2023-01-18
 */
public class SubtractFactory implements OperationFactory {
    @Override
    public Operation createOperation() {
        return new SubtractOperation();
    }
}

package com.gof.factory;

/**
 * 功能描述
 *
 * @since 2023-01-18
 */
public class MultiplyFactory implements OperationFactory {
    @Override
    public Operation createOperation() {
        return new MultiplyOperation();
    }
}
package com.gof.factory;

/**
 * 功能描述
 *
 * @since 2023-01-18
 */
public class DivideFactory implements OperationFactory {
    @Override
    public Operation createOperation() {
        return new DivideOperation();
    }
}

客户端


package com.gof.factory;

/**
 * 功能描述
 *
 * @since 2023-01-18
 */
public class Client {
    public static void main(String[] args) {
        AddFactory addFactory = new AddFactory();
        Operation operation = addFactory.createOperation();
        operation.setNum1(234);
        operation.setNum2(1);
        operation.getResult();
    }
}

比较

简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖
工厂模式的优势在于遵循了开放封闭原则,对扩展开放,对修改封闭

标签:01,since,05,18,gof,模式,工厂,Operation,public
From: https://www.cnblogs.com/Oh-mydream/p/17059300.html

相关文章

  • Android记录 透明状态栏+固化的沉浸模式的简单实现
    代码中实现透明状态栏的方法:publicclassMainActivityextendsAppCompatActivity{privateActivityMainBinding_binding;@Overrideprotectedvoidon......
  • 设计模式之模板方法模式和策略模式
    今天看了雷神的公开课,再次学习了设计模式的五个原则以及两个设计模式的应用案例模板方法模式:定义一个算法骨架(一套业务流程),子类可以实现里面的一个或多个步骤eg:对于Spr......
  • 学习记录-访问者模式
    访问者模式在访问者模式(VisitorPattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式......
  • leetcode简单(双指针):[88, 202, 345, 392, 455, 905, 922, 917, 925, 942]
    [toc88.合并两个有序数组varmerge=function(nums1,m,nums2,n){letA1=nums1.slice(0,m)letA2=nums2//追加哨兵A1.push(Number.MAX_S......
  • 读书笔记:价值投资.05.不为清单(一)
    老巴的教导千万别忘了:不做空,不借钱,不做不懂的东西.01.不做空(a股没有做空机制)做空有无限风险,因为一次错误就可能会致命.做空行为是投机行为,吾不该为之.......
  • 学习模式-中介者模式
    中介者模式中介者模式(MediatorPattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中......
  • 学习记录-桥接模式
    桥接模式桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。将继承关系转换为关联关系。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接......
  • 设计模式:单例模式
    最近谷咕咕在学习设计模式,都说不会设计模式的程序员是读不懂框架源码的,而且写出的代码是架构底下的。行吧,那只好卷一下,看看各个设计模式的优点。这里先是看了狂神的视频,然......
  • [oeasy]python0052_ raw格式字符串_单引号_双引号_反引号_ 退格键
    转义字符回忆上次内容最近玩的是\n、\r之外的转义序列\a是␇(bell)\t是水平制表符\v是换行不回车通过16进制数值转义\xhh把(hh)16进制对应的asci......
  • 必须退出播放模式才能保存场景
    必须退出播放模式才能保存场景 unity报错,怎么办?可以 不可以 ......