zoukankan      html  css  js  c++  java
  • 设计模式1---普通工厂模式

    工厂模式的精髓在于:

    当需要不同的条件产生具有多态性质的一组类时,可以考虑使用factory类,来生成。

    所以工厂模式的特征:

    1.需要有一个抽象的基类。

    2.需要用到一组子类,这些类需要相同的基类。

    3.需要通过一个factory类的static方法产生这一组基类。

    下面是一个计算器的例子:

    UML图如下:

    设计模式---image1

    如上图:

    1.计算器的操作是一组独立的数据操作。这些操作可以抽象为一个基类。

    2.通过工厂类可以产生这些操作类,并且可以赋值给抽象基类。

    工厂类:

    package com.jayfulmath.designpattern.samplefactory.operator;
    
    public class OperatorFactory {
    
        public static AbstractOperator CreateOperator(String operatorstr)
        {
            AbstractOperator oper = null;
            switch(operatorstr)
            {
            case "+":
                oper = new OperatorAdd();
                break;
            case "-":
                oper = new OperatorDelete();
                break;
            case "*":
                oper = new OperatorPlus();
                break;
            case "/":
                oper = new OperatorDevide();
                break;
            case "squar":
                oper = new OperatorSquare();
                break;    
            }
            
            return oper;
        }
    }
    package com.jayfulmath.designpattern.samplefactory.operator;
    
    public abstract class AbstractOperator {
        public double NumberA = 0;
        public double NumberB = 0;
        public abstract double GetResult();
    }

    add方法类:

    package com.jayfulmath.designpattern.samplefactory.operator;
    
    public class OperatorAdd extends AbstractOperator {
    
        @Override
        public double GetResult() {
            // TODO Auto-generated method stub
            return (NumberA+NumberB);
        }
    
    }

    main方法调用:

        @Override
        public void startDemo() {
            //add
            AbstractOperator addop = OperatorFactory.CreateOperator("+");
            addop.NumberA = 1;
            addop.NumberB = 2;
            System.out.println(addop.NumberA+" add "+addop.NumberB+" = "+addop.GetResult());
            
            //squar
            AbstractOperator squarop = OperatorFactory.CreateOperator("squar");
            squarop.NumberA = 1.2;
            System.out.println(addop.NumberA+" squar " +" = "+squarop.GetResult());
        }

    如上:通过工厂类方法:OperatorFactory.CreateOperator("+") 可以很快得到操作类和结果。

    优点:工厂类方法便于扩展方法,对原有代码改动很小。

    缺点:每次添加一个操作,工厂类就需要修改,这个对扩展开放,对修改也开放,违反了开放--关闭原则。

    所以使用工厂方法替代,可以符合该原则。

  • 相关阅读:
    python 操作mysql
    openstack 与 VMware(vSphere) 不同
    python redis 实现订阅发布
    python redis 管道
    python rabbitMQ 实现RPC
    python 连接redis
    使用gdb
    在应用程序中如何打印调用栈
    如何使用coredump
    linux中常用命令
  • 原文地址:https://www.cnblogs.com/deman/p/4123167.html
Copyright © 2011-2022 走看看