设计模式——工厂模式(Factory Method)
工厂方法模式,定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到其子类。
UML图:
运算基类:
- package com.cnblog.clarck;
- /**
- * 数据运算基类
- *
- * @author clarck
- *
- */
- public class Operation {
- private double mNmberA = 0;
- private double mNumberB = 0;
- public double getNumberA() {
- return mNmberA;
- }
- public void setNmberA(double numberA) {
- this.mNmberA = numberA;
- }
- public double getNumberB() {
- return mNumberB;
- }
- public void setNumberB(double numberB) {
- this.mNumberB = numberB;
- }
- /**
- * 获取运算结果
- * @return
- */
- public double getResult() {
- double result = 0;
- return result;
- }
- }
具体产品类:
- package com.cnblog.clarck;
- /**
- * 加法类
- *
- * @author clarck
- *
- */
- public class OperationAdd extends Operation {
- @Override
- public double getResult() {
- double result = 0;
- result = getNumberA() + getNumberB();
- return result;
- }
- }
- package com.cnblog.clarck;
- /**
- * 减法类
- *
- * @author clarck
- *
- */
- public class OperationSub extends Operation {
- @Override
- public double getResult() {
- double result = getNumberA() - getNumberB();
- return result;
- }
- }
- package com.cnblog.clarck;
- /**
- * 乘法
- *
- * @author clarck
- *
- */
- public class OperationMul extends Operation {
- @Override
- public double getResult() {
- double result = getNumberA() * getNumberB();
- return result;
- }
- }
- package com.cnblog.clarck;
- /**
- * 除法类
- *
- * @author clarck
- *
- */
- public class OperationDiv extends Operation {
- @Override
- public double getResult() {
- if (getNumberB() == 0) {
- throwException();
- }
- double result = getNumberA() / getNumberB();
- return result;
- }
- private void throwException() {
- try {
- throw new Exception("the div number can't be zero.");
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
工厂类接口:
- package com.cnblog.clarck;
- /**
- * 算法工厂
- *
- * @author clarck
- *
- */
- public interface IFactory {
- public Operation createOperation();
- }
工厂类:
- package com.cnblog.clarck;
- /**
- * 加法工厂
- *
- * @author clarck
- *
- */
- public class AddFactory implements IFactory {
- @Override
- public Operation createOperation() {
- return new OperationAdd();
- }
- }
- package com.cnblog.clarck;
- /**
- * 减法工厂
- *
- * @author clarck
- *
- */
- public class SubFactory implements IFactory {
- @Override
- public Operation createOperation() {
- return new OperationSub();
- }
- }
- package com.cnblog.clarck;
- /**
- * 乘法
- *
- * @author clarck
- *
- */
- public class MulFactory implements IFactory {
- @Override
- public Operation createOperation() {
- return new OperationMul();
- }
- }
- package com.cnblog.clarck;
- /**
- * 除法工厂
- *
- * @author clarck
- *
- */
- public class DivFactory implements IFactory {
- @Override
- public Operation createOperation() {
- return new OperationDiv();
- }
- }
运算符号类:
- package com.cnblog.clarck;
- /**
- * 加法, 减法, 乘法, 除法
- *
- * @author clarck
- *
- */
- public enum OperationSymbol {
- ADDITION, SUBTRACTION, MULTIPLICATION, DIVISION
- }
测试类:
- package com.cnblog.clarck;
- /**
- * 测试类
- *
- * @author clarck
- *
- */
- public class Client {
- public static void main(String[] args) {
- IFactory operFactory = new AddFactory();
- Operation operation = operFactory.createOperation();
- operation.setNmberA(1);
- operation.setNumberB(2);
- double result = operation.getResult();
- System.out.println("add result: " + result);
- operFactory = new SubFactory();
- Operation subOperation = operFactory.createOperation();
- subOperation.setNmberA(1);
- subOperation.setNumberB(2);
- double subResult = subOperation.getResult();
- System.out.println("sub result: " + subResult);
- operFactory = new MulFactory();
- Operation mulOperation = operFactory.createOperation();
- mulOperation.setNmberA(1);
- mulOperation.setNumberB(2);
- double mulResult = mulOperation.getResult();
- System.out.println("mul result: " + mulResult);
- operFactory = new DivFactory();
- Operation divOperation = operFactory.createOperation();
- divOperation.setNmberA(1);
- divOperation.setNumberB(2);
- double divResult = divOperation.getResult();
- System.out.println("div result: " + divResult);
- }
- }
设计模式——工厂模式(Factory Method)的更多相关文章
- [设计模式]工厂模式factory
参考:http://wxg6203.iteye.com/blog/740229 简单工厂模式(simple factory)是类的创建模式,又叫静态工厂方法(static factory method ...
- 设计模式 - 工厂模式(factory pattern) 具体解释
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u012515223/article/details/27081511 工厂模式(factory pa ...
- 大话设计模式--工厂模式 factory -- C++实现实例
实现<大话设计模式>的C++版本... 1. 工厂模式 使用的范围是 同一个基类,下面很多子类. (1)这里很容易出现的一个问题n多的子类继承自抽象基类,我们不得不在每次要用到子类的地方就 ...
- 设计模式——工厂方法(Factory Method)
定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. ——DP UML类图 模式说明 抽象业务基类 实际业务类的公共基类,也是工厂要创建的所有对象的父类,这部分 ...
- 设计模式--工厂模式Factory(创建型)
工厂模式属于创建型模式,分为三类,简单工厂模式.工厂方法模式.抽象工厂模式. 一.简单工厂模式 在工厂中做判断,根据产品类型从而创造相应的产品,当增加新产品时需要修改工厂类. 例如: enum CTY ...
- c++工厂模式(Factory method)
下面以女娲造黑人,白人,黄种人的例子来介绍一下工厂模式. 1.工厂的接口,相当于造人工厂总部. class IHumanFactory { public: IHumanFactory(void) { ...
- 23种设计模式--工厂模式-Factory Pattern
一.工厂模式的介绍 工厂模式让我们相到的就是工厂,那么生活中的工厂是生产产品的,在代码中的工厂是生产实例的,在直白一点就是生产实例的类,代码中我们常用new关键字,那么这个new出来的实例 ...
- 乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pattern)
原文:乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pa ...
- 设计模式-03工厂方法模式(Factory Method Pattern)
插曲.简单工厂模式(Simple Factory Pattern) 介绍工厂方法模式之前,先来做一个铺垫,了解一下简单工厂模式,它不属于 GoF 的 23 种经典设计模式,它的缺点是增加新产品时会违背 ...
随机推荐
- 破解MyEclipse
- bootstrap日历插件地址
http://www.bootcss.com/p/bootstrap-datetimepicker/
- 案例44-crm练习新增客户使用struts2
1 src下配置文件 1 struts.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYP ...
- 关于重定向printf出错 Error[Pe020]: identifier "FILE" is undefined 解决方案
IAR或者Keil用到重定向printf函数出现的错误解决方案 转发请注明出处,谢谢 原创:李剀 https://www.cnblogs.com/kevin-nancy/articles/105851 ...
- IDEA 14.0 (默认模式) 快捷键
IDEA 14.0 (默认模式) 快捷键 1.Alt+Shift+R:重命名变量名.类名.方法名(使用已经使用过的) 2.Ctrl+O :重写方法 3.Alt+Shift+P :实现接口 4.Alt+ ...
- struts 2 报错Could not find action or resul 常见错误原因分析
1.struts.xml配置的action与我们访问的action或返回的result确实没有匹配导致.这个时候要仔细检查Struts.xml配置文件: 2.我们的action输入正确,返回结果经过无 ...
- jqgrid 上移下移单元格
在表格中常常需要调整表格中数据的显示顺序,我用的是jqgrid,实现原理就是将表中的行数保存到数据库中,取数据时按行进行排序 1.上移,下移按钮 <a href="javascript ...
- java版两人聊天程序
server.java import java.io.*; import java.net.*; import java.text.SimpleDateFormat; import java.util ...
- js.css嵌入dll
处理请求,返回 public ActionResult Get() { //传递一个部分名称 var n = Request["n"]; n = n.Replace('/', '. ...
- H5 中html 页面存为图片并长按 保存
最近接到的一个新需求:页面一个静态H5,中间有一页是输入信息,然后跳转到最后一页,自动将页面生成图片,用户可以长按图片保存到手机上. 展示一下最后一页的样子: 刚拿到这个需求,在网上看了很多文章,最普 ...