设计模式 | 工厂方法模式(factory method)
定义:
结构:(书中图,侵删)


实例:
package designpattern.factorymethod;
import designpattern.staticfactorymethod.Calculate;
public interface CalculateFactory {
Calculate create();
}
package designpattern.factorymethod; import designpattern.staticfactorymethod.Calculate;
import designpattern.staticfactorymethod.Plus; public class PlusFactory implements CalculateFactory{ @Override
public Calculate create() {
return new Plus();
} }
package designpattern.factorymethod; import designpattern.staticfactorymethod.Calculate;
import designpattern.staticfactorymethod.Minus; public class MinusFactory implements CalculateFactory { @Override
public Calculate create() {
return new Minus();
} }
减
package designpattern.factorymethod; import designpattern.staticfactorymethod.Calculate;
import designpattern.staticfactorymethod.Multiply; public class MultiplyFactory implements CalculateFactory { @Override
public Calculate create() {
return new Multiply();
} }
乘
package designpattern.factorymethod; import designpattern.staticfactorymethod.Calculate;
import designpattern.staticfactorymethod.Divide; public class DivideFactory implements CalculateFactory { @Override
public Calculate create() {
return new Divide();
} }
除
package designpattern.staticfactorymethod;
public abstract class Calculate {
public double num1;
public double num2;
Calculate() {
}
Calculate(double num1, double num2) {
this.num1 = num1;
this.num2 = num2;
}
public abstract double calculate();
}
加:
package designpattern.staticfactorymethod;
public class Plus extends Calculate {
public Plus() {
}
Plus(double num1, double num2) {
super(num1, num2);
}
@Override
public double calculate() {
return num1 + num2;
}
}
package designpattern.staticfactorymethod;
public class Minus extends Calculate {
public Minus() {
}
Minus(double num1, double num2) {
super(num1, num2);
}
@Override
public double calculate() {
return num1 - num2;
}
}
减
package designpattern.staticfactorymethod;
public class Multiply extends Calculate {
public Multiply() {
}
Multiply(double num1, double num2) {
super(num1, num2);
}
@Override
public double calculate() {
return num1 * num2;
}
}
乘
package designpattern.staticfactorymethod;
public class Divide extends Calculate {
public Divide() {
}
Divide(double num1, double num2) {
super(num1, num2);
}
@Override
public double calculate() {
return num1 / num2;
}
}
除
package designpattern.factorymethod;
import java.util.Scanner;
import designpattern.staticfactorymethod.Calculate;
public class Client {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个数字");
double num1 = scanner.nextDouble();
System.out.println("请输入一个运算符:+、-、*、/");
String operator = scanner.next();// 不能用nextLine(),会把上一个回车给吸收
System.out.println("请输入一个数字");
double num2 = scanner.nextDouble();
CalculateFactory calculateFactory = null;
switch (operator) {
case "+":
calculateFactory = new PlusFactory();
break;
case "-":
calculateFactory = new MinusFactory();
break;
case "*":
calculateFactory = new MultiplyFactory();
break;
case "/":
calculateFactory = new DivideFactory();
break;
default:
break;
}
Calculate calculate = calculateFactory.create();
calculate.num1 = num1;
calculate.num2 = num2;
System.out.println(calculate.calculate());
scanner.close();
}
}
总结:
设计模式 | 工厂方法模式(factory method)的更多相关文章
- 大话设计模式--工厂方法模式 Factory Method -- C++实现
1. 工厂方法模式 定义一个用于创建对象的接口, 让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类. 和简单工厂模式相比: A: 简单工厂模式最大的优点在于工厂类中包含有必要的逻辑判断, ...
- C#设计模式——工厂方法模式(Factory Method Pattern)
一.概述在软件系统中,经常面临着“某个对象”的创建工作,由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口.如何应对这种变化?如何提供一种封装机制来隔离出“这个易变对象 ...
- [设计模式]工厂方法模式(Factory Method)
模式目的 定义一个用于创建对象的接口,让其子类来决定实例化哪个类. 工厂方法模式将类的实例化延迟到了子类中进行. 模式结构 组成部分 产品(Product) - 定义了产品功能的接口 具体产品(Con ...
- 乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pattern)
原文:乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pa ...
- 设计模式-03工厂方法模式(Factory Method Pattern)
插曲.简单工厂模式(Simple Factory Pattern) 介绍工厂方法模式之前,先来做一个铺垫,了解一下简单工厂模式,它不属于 GoF 的 23 种经典设计模式,它的缺点是增加新产品时会违背 ...
- 【设计模式】工厂方法模式 Factory Method Pattern
在简单工厂模式中产品的创建统一在工厂类的静态工厂方法中创建,体现了面形对象的封装性,客户程序不需要知道产品产生的细节,也体现了面向对象的单一职责原则(SRP),这样在产品很少的情况下使用起来还是很方便 ...
- 二十四种设计模式:工厂方法模式(Factory Method Pattern)
工厂方法模式(Factory Method Pattern) 介绍定义一个用于创建对象的接口,让子类决定将哪一个类实例化.Factory Method使一个类的实例化延迟到其子类. 示例有SqlMes ...
- 工厂方法模式-Factory Method(Java实现)
工厂方法模式-Factory Method 工厂方法模式定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法让实例化的具体内容交给子类工厂来进行. 本文中的例子是这样的. 生产一个身份证, ...
- IOS设计模式浅析之工厂方法模式(Factory Method)
概述 在软件系统中,经常面临着“某个对象”的创建工作,由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口. 如何隔离出这个易变对象的变化,使得系统中“其它依赖该对象的对 ...
- 设计模式之工厂方法模式(Factory Method Pattern)
一.工厂方法模式的诞生 在读这篇文章之前,我先推荐大家读<设计模式之简单工厂模式(Simple Factory Pattern)>这篇文档.工厂方法模式是针对简单工厂模式中违反开闭原则的不 ...
随机推荐
- Flask构建微电影(一)
第一章.项目介绍 1.1.前言 本教程我将带领大家如何使用flask框架开发微电影网站.Flask是python中最受欢迎的轻量级web框架,flask扩展丰富,冗余度小,可自由选择组合各种插 ...
- 软件性能测试技术树(二)----Linux服务器性能
全图: 测试目的: 测试范围&性能指标: 测试与生产环境服务器配置不同的处理方法: 实时CPU监控: 实时内存监控: 实时网络监控: 实时磁盘监控: 万能命令: Linux下的进程追踪命令: ...
- python_集合
>>> import random>>> import time>>> x=list(range(10000))>>> y=se ...
- DX11 Without DirectX SDK--04 使用DirectX Tool Kit帮助开发
回到 DirectX11--使用Windows SDK来进行开发 DirectX Tool Kit下载 DirectX Tool Kit是一个包含许多类的集合,用于为公共Windows平台编写Dire ...
- C Primer Plus 第6章 C控制语句:循环 编程练习
记录下写的最后几题. 14. #include <stdio.h> int main() { double value[8]; double value2[8]; int index; f ...
- git进阶
一.刚提交的代码,发现需要微调一下 刚刚最新提交了一段代码,然后跟前端说,接口好了.过了2分钟,前端跟你说,哎,兄弟,那个金额能不能返回整数,不要小数点. 这个时候一般我们通常会修改一下之后,再提交一 ...
- Java移位运算符详解实例
移位运算符它主要包括:左移位运算符(<<).右移位运算符(>>>).带符号的右移位运算符(>>),移位运算符操作的对象就是二进制的位,可以单独用移位运算符来处 ...
- Python +selenium自动化环境的搭建
Python +selenium+googledriver 小白的血泪安装使,不停的总结写心得是理解透彻的毕竟之路 一,python的安装: 首先去Python的官网下载安装包:https://www ...
- Spring Boot + Websocket + Thymeleaf + Lombok
https://github.com/guillermoherrero/websocket 验证错误消息文件名字:是默认名ValidationMessages.properties,编译后存放在cla ...
- Python3 venv 创建虚拟环境
简介 Python3.3以上的版本通过venv模块原生支持虚拟环境,可以代替Python之前的virtualenv. 该venv模块提供了创建轻量级"虚拟环境",提供与系统Pyth ...