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

简单工厂模式

工厂方法模式

package com.dp.factory;

interface IFactory {
   Calculator CreateCalculator();
} 

class AddFactory implements IFactory
{

    @Override
    public Calculator CreateCalculator() {
      return new CalculatorAdd();
    }

}

class SubFactory implements IFactory
{

    @Override
    public Calculator CreateCalculator() {
         return new CalculatorMinus();
    }

}

class MulFactory implements IFactory
{

    @Override
    public Calculator CreateCalculator() {
        return new CalculatorMultiply();
    }

}

class DivFactory implements IFactory
{

    @Override
    public Calculator CreateCalculator() {
      return new CalculatorDivide();
    }

}

 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;
    }
}

package com.dp.leifengFactory;
//简单工厂模式实现
public abstract class LeiFeng { public void sweep() { System.out.println("扫地"); } public void wash() { System.out.println("洗衣服"); } public void buyRice() { System.out.println("买米"); } } class Undergraduate extends LeiFeng { } class Volunteer extends LeiFeng { } class SimpleFactory { public static LeiFeng CreateLeiFeng(String type) { LeiFeng result=null; switch(type) { case "学雷锋的大学生": result=new Undergraduate(); break; case "志愿者": result=new Volunteer(); break; } return result; } }
package com.dp.leifengFactory;

public class Client {
   public static void main(String[] args) {
     LeiFeng StudentA=SimpleFactory.CreateLeiFeng("学雷锋的大学生");
     LeiFeng StudentB=SimpleFactory.CreateLeiFeng("学雷锋的大学生");
     LeiFeng StudentC=SimpleFactory.CreateLeiFeng("学雷锋的大学生");
}
}

使用工厂方法

package com.dp.leifengFactory;

public interface IFactory
{
  LeiFeng createLeifeng();
}

class UnderGraduateFactory implements IFactory
{

    @Override
    public LeiFeng createLeifeng() {
        // TODO Auto-generated method stub
        return new Undergraduate();
    }

}

class VolunteerFactory implements IFactory
{

    @Override
    public LeiFeng createLeifeng() {
        // TODO Auto-generated method stub
        return new Volunteer();
    }

}

abstract class LeiFeng
{
    public void sweep()
    {
        System.out.println("扫地");
    }

    public void wash()
    {
        System.out.println("洗衣服");
    }

    public void buyRice()
    {
        System.out.println("买米");
    }
}

class Undergraduate extends LeiFeng
{

}

class Volunteer extends LeiFeng
{

}
package com.dp.leifengFactory;

public class Client {
   public static void main(String[] args) {
   IFactory factory=new UnderGraduateFactory();
   LeiFeng lf=factory.createLeifeng();
   lf.buyRice();
}
}
时间: 2024-11-05 15:58:45

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

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

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

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

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 number

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

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

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

#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

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

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

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

设计模式粗浅理解之------简单工厂模式 什么是简单工厂模式 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(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.

设计模式(1)--简单工厂模式、策略模式

1. 简单工厂模式 在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例. 先放图再解释.下图一是从<大话设计模式>中摘出来的.问题是:用任意一种面向对象语言实现一个计算器控制台程序,要求输入两个数和运算符号,得到结果. 简单工厂模式实现的关键点有两个: 1. 继承:定义一个抽象父类“抽象产品”(Operation类