设计模式——简单工厂模式(SimpleFactory Pattern)
2013-10-21 23:59
621 查看
最近做项目总是遇到这样或者那样的问题,代码不够简洁,代码可扩展性不够好,耦合度又太高了,导致经常有种想去重构又无从下手的感觉。
无意间翻出了之前买的一本书《大话设计模式》读了一遍,受益匪浅,决定将其中的代码用java来实现一遍,个中精髓自行体会,
此处只做代码的具体实现。^-^
UML图:
模型:
产品基类:Product
产品A的实例:ProductA
产品B的实例:ProductB
简单工厂类:ProductFactory
产品类型:ProductType
测试类:Test
实例运用:
---------------------------------------------------------------------------------------
数据运算基类:Operation
加法类:OperationAdd
减法运算类:OperationSub
乘法运算类:OperationMul
除法类:OperationDiv
简单工厂类:OperationFactory
运算符号类:OperationSymbol
测试类:Test
无意间翻出了之前买的一本书《大话设计模式》读了一遍,受益匪浅,决定将其中的代码用java来实现一遍,个中精髓自行体会,
此处只做代码的具体实现。^-^
UML图:
模型:
产品基类:Product
package com.cnblog.clarck; /** * 产品类 * * @author clarck * */ public class Product { /** * 创建产品 * * @return */ public String createRealProduct() { String product = ""; return product; } }
产品A的实例:ProductA
package com.cnblog.clarck; /** * 产品A * * @author clarck * */ public class ProductA extends Product { @Override public String createRealProduct() { String productA = "产品A"; return productA; } }
产品B的实例:ProductB
package com.cnblog.clarck; /** * 产品B * * @author clarck * */ public class ProductB extends Product { @Override public String createRealProduct() { String productB = "产品B"; return productB; } }
简单工厂类:ProductFactory
package com.cnblog.clarck; /** * 产品工厂 * * @author clarck * */ public class ProductFactory { public static Product createProduct(ProductType type) { Product product = null; switch (type) { case PRODUCTA: product = new ProductA(); break; case PRODUCTB: product = new ProductB(); break; default: break; } return product; } }
产品类型:ProductType
package com.cnblog.clarck; /** * 产品A,产品B的类型 * * @author clarck * */ public enum ProductType { PRODUCTA, PRODUCTB }
测试类:Test
package com.cnblog.clarck; /** * 测试用例 * * @author clarck * */ public class Test { public static void main(String[] args) { Product product = ProductFactory.createProduct(ProductType.PRODUCTA); String productA = product.createRealProduct(); System.out.println(productA); product = ProductFactory.createProduct(ProductType.PRODUCTA); String productB = product.createRealProduct(); System.out.println(productB); } }
实例运用:
---------------------------------------------------------------------------------------
数据运算基类:Operation
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; } }
加法类:OperationAdd
package com.cnblog.clarck; /** * 加法类 * * @author clarck * */ public class OperationAdd extends Operation { @Override public double getResult() { double result = 0; result = getNumberA() + getNumberB(); return result; } }
减法运算类:OperationSub
package com.cnblog.clarck; /** * 减法类 * * @author clarck * */ public class OperationSub extends Operation { @Override public double getResult() { double result = getNumberA() - getNumberB(); return result; } }
乘法运算类:OperationMul
package com.cnblog.clarck; /** * 乘法 * * @author clarck * */ public class OperationMul extends Operation { @Override public double getResult() { double result = getNumberA() * getNumberB(); return result; } }
除法类:OperationDiv
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("除数不能为0."); } catch (Exception e) { e.printStackTrace(); } } }
简单工厂类:OperationFactory
package com.cnblog.clarck; /** * 工厂类 * * @author clarck * */ public class OperationFactory { /** * 创建运算类的工厂 * * @param operate * 运算类对象 * @return * 创建成功-运算类对象,返回空 */ public static Operation createOperation(OperationSymbol operate) { Operation oper = null; switch (operate) { case ADDITION: oper = new OperationAdd(); break; case SUBTRACTION: oper = new OperationSub(); break; case MULTIPLICATION: oper = new OperationMul(); break; case DIVISION: oper = new OperationDiv(); break; default: break; } return oper; } }
运算符号类:OperationSymbol
package com.cnblog.clarck; /** * 加法, 减法, 乘法, 除法 * * @author clarck * */ public enum OperationSymbol { ADDITION, SUBTRACTION, MULTIPLICATION, DIVISION }
测试类:Test
package com.cnblog.clarck; /** * 测试类 * * @author clarck * */ public class Test { public static void main(String[] args) { Operation oper = null; oper = OperationFactory.createOperation(OperationSymbol.ADDITION); oper.setNmberA(1.0); oper.setNumberB(2.0); double addResult = oper.getResult(); System.out.println("addResult =" + addResult); oper = OperationFactory.createOperation(OperationSymbol.SUBTRACTION); oper.setNmberA(1.0); oper.setNumberB(2.0); double subResult = oper.getResult(); System.out.println("subResult =" + subResult); oper = OperationFactory.createOperation(OperationSymbol.MULTIPLICATION); oper.setNmberA(1.0); oper.setNumberB(2.0); double mulResult = oper.getResult(); System.out.println("mulResult =" + mulResult); oper = OperationFactory.createOperation(OperationSymbol.DIVISION); oper.setNmberA(1.0); oper.setNumberB(2.0); double divResult = oper.getResult(); System.out.println("divResult =" + divResult); } }
相关文章推荐
- 设计模式笔记之工厂模式--简单工厂模式(Simple Factory Pattern)
- JAVA设计模式之 简单工厂模式【Simple Factory Pattern】
- 三.创建型设计模式——Simple Factory Pattern(简单工厂模式)
- Net设计模式之简单工厂模式(Simple Factory Pattern) 推荐
- 角色产品设计模式之八:简单工厂模式(Simple Factory pattern)
- 极速理解设计模式系列:3.简单工厂模式(Simple Factory Pattern)
- 浅谈 java 设计模式--简单工厂模式(Simple Factory pattern)
- C#设计模式之简单工厂模式(Simple Factory Pattern)
- C++ 设计模式之——简单工厂模式(SimpleFactoryPattern)
- 设计模式---1:DOTNet设计模式实例之简单工厂模式(Simple Factory Pattern)
- 设计模式之简单工厂模式(Simple Factory Pattern)
- 我所理解的设计模式(C++实现)——简单工厂模式(Simple Factory Pattern)
- java设计模式——简单工厂模式(Simple Factory Pattern)
- c++设计模式:简单工厂模式(Simple Factory Pattern)
- Net设计模式实例之简单工厂模式(Simple Factory Pattern)
- 【JAVA设计模式】简单工厂模式(Simple Factory Pattern)
- 解读设计模式----简单工厂模式(SimpleFactory Pattern),你要什么我就给你什么
- 设计模式学习笔记--简单工厂模式(Simple Factory Pattern)【创建型模式】
- 设计模式(Design Pattern)之简单工厂模式(Simple Factory Pattern)
- 设计模式(二)简单工厂模式(Simple Factory Pattern)