zoukankan      html  css  js  c++  java
  • 设计模式之简单工厂模式

        今天学习了简单工厂模式,总结一下。

        简单工厂模式的核心思想是:由一个工厂实体决定创建出哪一种产品的实例

        比较简单,因此直接上代码:

        这个例子我们实现一个简单的计算器。我们先定义一个计算行为接口,行为比较简单就是计算。

    1 package com.java.simpleFactory;
    2 
    3 public interface CalcOperation {
    4     public float doCalc();
    5 }

    接着我们分别用加减乘除不同的运算去实现这个接口。

     1 package com.java.simpleFactory;
     2 
     3 public class AddOperation extends DefaultOperation implements CalcOperation{
     4     
     5     public AddOperation(float a,float b){
     6         this.setA(a);
     7         this.setB(b);
     8     }
     9     
    10     @Override
    11     public float doCalc() {
    12         return this.getA()+this.getB();
    13     }
    14 
    15 }
    16 
    17 
    18 package com.java.simpleFactory;
    19 
    20 public class MinusOperation extends DefaultOperation implements CalcOperation {
    21     
    22     public MinusOperation(float a,float b) {
    23         this.setA(a);
    24         this.setB(b);
    25     }
    26     
    27     
    28     @Override
    29     public float doCalc() {
    30         return this.getA()-this.getB();
    31     }
    32 
    33 }
    34 
    35 package com.java.simpleFactory;
    36 
    37 public class MultOperation extends DefaultOperation implements CalcOperation {
    38 
    39     public MultOperation(float a,float b) {
    40         this.setA(a);
    41         this.setB(b);
    42     }
    43 
    44     @Override
    45     public float doCalc() {
    46         return this.getA()*this.getB();
    47     }
    48 
    49 }
    50 
    51 package com.java.simpleFactory;
    52 
    53 public class DvdOperation extends DefaultOperation implements CalcOperation {
    54 
    55     public DvdOperation(float a,float b) {
    56         this.setA(a);
    57         this.setB(b);
    58     }
    59 
    60     @Override
    61     public float doCalc() {
    62         if(this.getB()==0)
    63             return 0;
    64         return this.getA()/this.getB();
    65     }
    66 
    67 }

    最后就是我们的工厂类了

     1 package com.java.simpleFactory;
     2 
     3 public class OperationFactory {
     4 
     5     public CalcOperation CreateOpreation(String sign,float a,float b){
     6         CalcOperation calcOperation = null;
     7         switch(sign){
     8             case "+":
     9                 calcOperation = new AddOperation(a, b);
    10                 break;
    11             case "-":
    12                 calcOperation = new MinusOperation(a, b);
    13                 break;
    14             case "*":
    15                 calcOperation = new MultOperation(a, b);
    16                 break;
    17             case "/":
    18                 calcOperation = new DvdOperation(a, b);
    19                 break;
    20         }
    21         return calcOperation;
    22     }
    23 
    24 }

    测试一下

     1 package com.java.simpleFactory;
     2 
     3 public class Test {
     4 
     5     public static void main(String[] args) {
     6         OperationFactory factory=new OperationFactory();
     7         CalcOperation operation = factory.CreateOpreation("/", 2, 3);
     8         System.out.println(operation.doCalc());
     9 
    10     }
    11 
    12 }

    简单工厂模式看着很简单,但是作用很大。推荐大佬的一片文章:http://www.cnblogs.com/zuoxiaolong/p/pattern4.html

  • 相关阅读:
    Linux下套接字具体解释(九)---poll模式下的IO多路复用server
    【零基础学习iOS开发】【02-C语言】08-基本运算
    用python合并N个不同字符集编码的sql文件的实践
    小木虫emuch遭封禁,新域名muchong.com尚可用
    DB2中编目本机其中数据库的方法
    php socket 处理只是来数据流,该怎样避免(好像是堵塞了)
    Submission Details [leetcode] 算法的改进
    Qt Installer Framework的学习
    CI如何在子目录下可以设置默认控制器
    php CI 实战教程:如何去掉index.php目录
  • 原文地址:https://www.cnblogs.com/loveyejinhui/p/8711428.html
Copyright © 2011-2022 走看看