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

    大话设计模式

    一、简单工厂模式

    思想:简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。

    优点:工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体类的对象.通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,仅仅需要负责消费对象就可以了。而不必管这些对象究竟如何创建及如何组织的.明确了各自的职责和权利,有利于整个软件体系结构的优化。

    缺点:由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。当系统中的具体产品类不断增多时候,可能会出现要求工厂类根据不同条件创建不同实例的需求.这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利。

    Java代码实现

    Operation

     1  public class Operation {
     2 
     3    protected double numberA=0;
     4 
     5    protected double numberB=0;
     6 
     7    protected double result=0;
     8 
     9    public double getNumberA() {
    10 
    11    return numberA;
    12 
    13 }
    14 
    15 public void setNumberA(double numberA) {
    16 
    17     this.numberA = numberA;
    18 
    19 }
    20 
    21 public double getNumberB() {
    22 
    23     return numberB;
    24 
    25 }
    26 
    27 public void setNumberB(double numberB) {
    28 
    29     this.numberB = numberB;
    30 
    31 }
    32 
    33 public double getResult() {
    34 
    35     return result;
    36 
    37 }
    38 
    39 public void setResult(double result) {
    40 
    41     this.result = result;
    42 
    43 }
    44 
    45 public static void main(String[]args){
    46 
    47    Operation oper;
    48 
    49    oper=OperationFactory.createOperation('/');
    50 
    51    oper.numberA=1;
    52 
    53    oper.numberB=2;
    54 
    55    oper.result=oper.getResult();
    56 
    57    System.out.println(oper.result);
    58 
    59   }
    60 
    61 }

    OperationAdd

     

    1 public class OperationAdd extends Operation {
    2    public  double getResult(){
    3        
    4        result=numberA+numberB;
    5        return result;
    6    }
    7 }

     

    OperationSub

    1 public class OperationSub extends Operation{
    2      public double getResult(){
    3          result=numberA-numberB;
    4          return result;
    5      }
    6 }

    OperationMul

    1 public class OperationMul extends Operation{
    2      public double getResult(){
    3          result=numberA*numberB;
    4          return result;
    5      }
    6 }

    OperationDiv

    public class OperationDiv extends Operation {
        public double getResult(){
            if(0==numberB){
                System.out.println("数据有误,除数不能为0!");
            }
            numberB=numberB*1.0;
            result=numberA/numberB;
            return result;
        }
    }

    OperationFactory

     1 public class OperationFactory {
     2 
     3     public static Operation createOperation(char operate){
     4         Operation oper=null;
     5         switch (operate) {
     6         case '+':
     7             oper=new OperationAdd();
     8             break;
     9         case '-':
    10             oper=new OperationSub();
    11             break;
    12         case '*':
    13             oper=new OperationMul();
    14             break;
    15         case '/':
    16             oper=new OperationDiv();
    17             break;
    18 
    19         
    20         }
    21         return oper;
    22     }
    23 
    24 }
  • 相关阅读:
    制作类似QQ截图软件
    XML文件与实体类的互相转换
    MFC中真彩工具条的制作方法
    MFC使用技巧集锦(1)(转载)
    抽象工厂模式与工厂方法模式区别
    VC数据库编程分析
    如何让工具条显示256色图像
    华为软件编程规范和范例
    设计模式总结性试题
    VC++中基于ADO操作ACCESS数据库,FLEXGRID控件的综合应用
  • 原文地址:https://www.cnblogs.com/tian2fei/p/3049646.html
Copyright © 2011-2022 走看看