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

    简单工厂模式

    说先说一下我们熟悉的23中设计模式划分:

    总体来说设计模式分为三大类:

    创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

    结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

    行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

    其实还有两类:并发型模式和线程池模式。

    今天只要是针对简单工厂模式给大家讲解一下。直接例子上。

    问题:请用C++,java,c#。vb任意一种面向对象语言实现一个计算器控制台程序。要求输入两个数和运算符号。得出结果。

    这种问题大家应该都差不多都会。但是今天主要讲解,这个简单工厂模式的开发使用。

    
    

    package com.hs.huojg;

    
    

    import java.io.Serializable;

    
    

    public class OperationEntity implements Serializable{
    private Double numberA;//第一个数
    private Double numberB;//第二个数
    public Double getNumberA() {
    return numberA;
    }
    public void setNumberA(Double numberA) {
    this.numberA = numberA;
    }
    public Double getNumberB() {
    return numberB;
    }
    public void setNumberB(Double numberB) {
    this.numberB = numberB;
    }
    public Double GetResult(){
    double result=0d;
    return result;
    }
    }

    
    

    大家看到上面代码的含义了。不错,就是先定义两个数出来。有人会问,为什么要这样定义呢。最后再给大家讲。先看代码。

    package com.hs.huojg;
    /**
     * 简单运算工厂类
     * 
     * 只需要输入运算符,工厂就会自动找到自己的对象实例化
     * 通过多态,返回父类的方式来实现计算器的结果。
     * 
     * */
    public class operactionFactory {
        public static OperationEntity createOperation(String operation){
            OperationEntity oper=null;
            switch (operation) {
            case "+":
                oper= new operationAdd();
                break;
            case "-":
                oper= new operationSub();    
                break;
            case "*":
                oper= new operationMul();
                break;
            case "/":            
                    oper= new operationDiv();            
                    
                break;
            default:
                break;
            }
            return oper;
            
        }
    
    }

    哈哈哈哈。。。这一段代码如果你看懂了。那么这个简单工厂模式你就算,会简单应用了哦!

    下面继续代码走起。

    package com.hs.huojg;
    /**
     * 加法类
     * 
     * */
    public class operationAdd extends OperationEntity{
        @Override
        public Double GetResult(){
            double result=0d;
            result=getNumberA()+getNumberB();
            return result;
        }
    }



    package com.hs.huojg;

    
    

    public class operationDiv extends OperationEntity{
    @Override
    public Double GetResult(){
    double result=0d;
    if(getNumberB()!=0){
    result=getNumberA()/getNumberB();
    }else{
    result= Double.parseDouble("不能被除");
    }
    return result;
    }
    }

    package com.hs.huojg;

    public class operationMul extends OperationEntity {
    @Override
    public Double GetResult(){
    double result=0d;
    result=getNumberA()*getNumberB();
    return result;
    }
    }

    package com.hs.huojg;

    public class operationSub extends OperationEntity{
    @Override
    public Double GetResult(){
    double result=0d;
    result=getNumberA()-getNumberB();
    return result;
    }
    }

     

    代码完毕

    最后再来个测试:

    package com.hs.huojg;
    
    public class FactoryTest {
        public static void main(String args[]){
            OperationEntity oper=new OperationEntity();
            oper=operactionFactory.createOperation("*");
            oper.setNumberA(4d);
            oper.setNumberB(5d);    
            Double redult=oper.GetResult();
            System.out.println(redult);
        }
    }

    总结:以上代码就是用简单工厂模式开发出来的,计算器。这么简单的代码,有什么难理解的嘛? 相比大家从代码中就会知道。什么是简单工厂模式。不错。简单工厂模式就是实例化对象的。就这么简单。以上代码注重点:第一:对象初始化的条件。第二回调结果。

    如果大家感觉以上设计有什么缺陷请加。499749405群进行交流。让我们一起成长。

  • 相关阅读:
    How to Use HyperV Snapshot Revert, Apply, and Delete Options
    读取含有命名空间xml文件内容
    C# 如何判断文件属性(like: readonly)
    Winform: how to cancel the winform close when click the "x" button
    Android 程序打包及签名 【图解】
    【转】近两日极为纠结——游戏服务器,选择何种技术方案?(Python + SWIGRakNet + Lua)
    apk打包和反编译三、有关 Conversion to Dalvik format failed with error 1
    (转)投票软件识别验证码思路及方法
    如何解决Android中输入法挡住输入框的问题
    A folder failed to be renamed or moved安装Android SDK的问题
  • 原文地址:https://www.cnblogs.com/huojg-21442/p/6946878.html
Copyright © 2011-2022 走看看