大话设计模式第一章之简单工厂模式

package com.dp.simpleFactory;

//计算器作为抽象类  定义一个计算需要什么    子类继承了两个数字      并且要有自己的计算实现方法
public abstract class  Calculator {
     protected double numberA=0;
     protected double numberB=0;
    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 abstract double getResult() throws Exception;
}

class CalculatorAdd extends Calculator
{
    @Override
    public double getResult() {
        double result=numberA+numberB;
        return result;
    }
}

class CalculatorMinus extends Calculator
{
    @Override
    public double getResult() {
        double result=numberA-numberB;
        return result;
    }
}

class CalculatorMultiply extends Calculator
{
    @Override
    public double getResult() {
        double result=numberA*numberB;
        return result;
    }
}

class CalculatorDivide extends Calculator
{
    @Override
    public double getResult() throws Exception {
        double result=numberA/numberB;
        if(numberB==0)
            throw new Exception("除数不能为0");
        return result;
    }
}

//问题是:怎么根据输入而得到指定的类?

//使用简单工厂设计模式   根据操作符得到某个类(根据xx条件得到XX类)
class CalculatorFactory
{
    public static Calculator createCalculator(String operate)
    {
       Calculator cal=null;
       switch(operate)
       {
       case "+":
               cal=new CalculatorAdd();
               break;

       case "-":
             cal=new CalculatorMinus();
             break;

       case "*":
             cal=new CalculatorMultiply();
             break;

       case "/":
             cal=new CalculatorDivide();
             break;
       }
       return cal;
    }
}
package com.dp.simpleFactory;

import java.util.Scanner;
/**
 * 客户端
 *
 *
 */
public class Client {
   public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        System.out.println("请输入数字A");
        String numberA=in.next();
        System.out.println("请输入运算符号(ex:+ - * /)");
        String operate=in.next();
        System.out.println("请输入数字B");
        String numberB=in.next();
    //根据输入的符号得到具体的实现子类 使用到多态
        Calculator cal=CalculatorFactory.createCalculator(operate);
        cal.setNumberA(Double.parseDouble(numberA));
        cal.setNumberB(Double.parseDouble(numberB));
        double result=0;

        try {
            result = cal.getResult();
        } catch (Exception e) {
            System.out.println("除数不能为0");
        }
        System.out.println(result);

   }
}

UML类图:

书中给的一些关于UML图的用法:

在core java一书中作者说到类之间的关系只有三种,一种是关联(has a ) 一种是依赖(use a) 一种是继承(is a) 但是这样分可能在UML中还难以表达。

我想既然是面向对象那么只用三种方式描述是不够严谨的,UML表示类之间的关系更能表达现实生活中类之间的关系。

继承和实现就不说了 两者没什么区别

关联

企鹅和气候是一种关联关系,企鹅需要了解天气是怎么样的,根据天气作出他们的行为(就好像人和天气是关联的,我们要知道天气怎么样)

聚合

一种弱的拥有关系,比如雁群中有大雁,但某一只大雁可以不在雁群中。

组合

一种强的又有关系,比如头是一个类,那么嘴巴 耳朵和头都是组合的关系,无法分离

 依赖   动物新陈代谢依赖于氧气和水,没有氧气和水,动物就会死亡

时间: 2024-12-09 02:01:53

大话设计模式第一章之简单工厂模式的相关文章

大话设计模式——第一章:简单工厂模式

#include<iostream> #include<string> #include<exception>//c++标准异常类型的库 using namespace std; bad_exception somethingwrong; //在c++中class默认的继承是private 而struct 默认的继承是public //static 类静态成员函数,即与对象无关,在类中的值不是因实例化某个对象而改变. class operation//运算类(基类) {

大话设计模式第一章---计算器简单工厂模式PHP实现

1 <?php 2 abstract class Operation { 3 private $_numberA = 0; 4 private $_numberB = 0; 5 6 public function __get($number) { 7 if (isset($this->$number)) { 8 return $this->$number; 9 } else { 10 echo "the two number name is '_numberA' and '_n

大话设计模式读书笔记1——简单工厂模式

最近几日,重温了一下<大话设计模式>这本书,当时读的仓促,有很多没有注意的地方,现在仔细翻看起来,发现这值得细细品味的一本书!! 好东西就要记下来!!! 第一章笔记:从一个简单的计算器程序来看简单工厂模式. 变化的地方就要封装,用一个单独的类来做创造实例的过程这就是工厂. UML图: /// <summary> /// 运算类 /// </summary> public class Operation { public double Number1 { get; set

大话设计模式第八章之简单工厂模式

简单工厂模式 工厂方法模式 package com.dp.factory; interface IFactory { Calculator CreateCalculator(); } class AddFactory implements IFactory { @Override public Calculator CreateCalculator() { return new CalculatorAdd(); } } class SubFactory implements IFactory {

大话设计模式读书笔记--1.简单工厂模式

定义 专门定义一个类来负责创建其他类的实例, 被创建的类通常具有共同的父类. 它又称为静态工厂模式,属于类的创建型模式 模式类图 将对象的创建和对象本身业务处理分离了,可以降低系统的耦合 工厂模式实现 场景:实现一个计算器, 输入a和b, 计算a+b和a-b 下载代码,解压后目录如下图: 优缺点 当增加一个乘法运算时,需要添加乘法类和修改工厂类创建对象的逻辑,它违反了开闭原则 优点:提供专门的工程类创建对象, 降低系统的耦合 缺点: 添加新产品时,需要修改工厂类, 系统扩展困难 使用场景 1.客

设计模式粗浅理解之一------简单工厂模式

设计模式粗浅理解之------简单工厂模式 什么是简单工厂模式 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现. 角色和职责 工厂(Creator)角色 简单工厂模式的核心,它负责实现创建所有实例的内部逻辑.工厂类可以被外界直接调用,创建所需的产

Java设计模式(一) 简单工厂模式不简单

原创文章,转载请务必将下面这段话置于文章开头处. 本文转发自Jason's Blog,原文链接 http://www.jasongj.com/design_pattern/simple_factory 简单工厂模式使用案例 有一种抽象产品--汽车(Car),同时有多种具体的子类产品,如BenzCar,BMWCar,LandRoverCar.类图如下 作为司机,如果要开其中一种车,比如BenzCar,最直接的做法是直接创建BenzCar的实例,并执行其drive方法,如下 package com.

设计模式(一)——简单工厂模式

嵌入式linux 设计模式(一)--简单工厂模式 一.简单工厂模式简介 1.简单工厂模式 简单工厂模式(Factory Method Pattern)是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例. 简单工厂模式的UML类图 工厂角色(Creator):是简单工厂模式的核心,由它负责创建所有的类的内部逻辑.工厂类必须能够被

大话设计模式-第一章-简单工厂模式

一.UML图 二.包含的角色 简单工厂模式包含三个角色:(1)工厂类Factory(2)抽象产品类AbstractProduct(3)具体产品类ConcreteProduct. (1)Factory:工厂类是用来制造产品的.因此,在Factory中有一个用于制造产品的Create函数或者Generate函数之类的函数.这个函数能够根据"标识符"的不同生成不同的ConcreteProduct,当然这些ConcreteProduct都是继承自AbstractProduct的. (2)Abs