简单工厂模式

设计模式学习之简单工厂模式

…衆ロ難τιáo~ 提交于 2020-04-04 17:52:01
简单工厂模式,其实就是有一个静态的工厂方法,可以根据输出的条件返回对应的实例,然后再条用具体的实例的方法执行计算。 简单工厂模式相当与将条件判断都集中到了一个静态的工厂方法中。这样的好处是,执行具体计算任务的代码不需要再有很多的if判断,只专注于具体的计算。如果有新的计算需求,那么只需要增加相应的计算方法,并且在工厂方法中添加对应的入口条件就行了,对原有的计算方法没有任何影响。 一个简单计算器的实现例子如下 计算的类型接口: /** * @author wgyang * Create time: 2020-04-04 15:34 * Description: */ public interface Operator { /** * 计算 * * @param number1 数字1 * @param number2 数字2 * @return 返回计算的结果 */ String calculate (int number1, int number2); } 四则运算操作: /** * @author wgyang * Create time: 2020-04-04 15:44 * Description: 加法操作 */ public class OperatorAdd implements Operator { public String calculate(int

设计模式——工厂方法模式

我的梦境 提交于 2020-04-04 00:00:11
目录 1. 简介 2. 示例1-计算器重构 2.1 背景说明 2.2 代码重构 2.3 程序类图 3. 示例2-模拟多功能日记记录器 3.1 背景说明 3.2 代码实现 3.3 程序类图 4. 总结分析 4.1 优点 4.2 缺点 4.3 适应场合 4.4 其他说明 5. 参考及源码下载 shanzm-2020年4月3日 22:26:27 1. 简介 工厂方法模式(Factory Method Pattern) 也称为 工厂模式 ,又称为虚拟构造器模式或多态模式。 在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。 工厂方法模式主要类: Product 抽象产品类(或是接口),派生出所有的具体产品类 ConcreteProductA 、 ConcreteProductA …… ConcreteProduct 具体产品类,继承于 Product 抽象类 Factory 抽象工厂接口,所有的具体工厂类都是实现该接口 ConcreteFactory 具体工厂,实现了 Factory 接口,创建具体的产品对象 注:在GoF的《设计模式:可复用面向对象软件的基础》,对工厂方法模式的描述中使用的是 Creator接口,其含有

简单工厂模式

独自空忆成欢 提交于 2020-04-02 09:31:33
简单工厂模式概述 当我们需要根据不同的逻辑创建不同的运算逻辑,而这些逻辑又是同属一个种类下的,此时就可以将判断逻辑放入一个类中,由该类提供入口参数,调用不同的逻辑对象返回相对应的结果。 以下我们就以一个简单的计算器作为例子 不使用工厂模式的实现方法 public class TestMain { public static void main(String[] args) { String operator; int firNum = 1; int secNum = 2; //加法 operator = "+"; if("+".equals(operator)) { System.out.println(firNum + secNum); } else if("-".equals(operator)) { System.out.println(firNum - secNum); } else if("*".equals(operator)) { System.out.println(firNum * secNum); } else if("/".equals(operator)) { if(secNum != 0) System.out.println(firNum / secNum); } else { System.out.println(0); } } }

简单工厂模式

依然范特西╮ 提交于 2020-03-25 08:47:18
工厂模式分为三种: 简单工厂模式 、工厂方法模式、抽象工厂模式,此篇我们来总结简单工程模式! 简洁来说:简单工厂模式用来解决实例化的问题。例如:存在加法,减法、乘法、除法的类时,当要利用加法时,就需要工厂来对加法类进行实例化,并返回此实例,当要使用乘法,也需要工厂来对乘法类进行实例化,并返回实例。即:对于有选择性的去实例化类的操作都在一个【工厂类】中执行。 下面就看一个工厂类 public class OperateFactory { public static Operate GetInstace(string strOperate) { Operate oper = null; switch (strOperate) { case "加法": oper=new OperateAdd(); break; case "减法": oper=new OperateSubtraction(); break; default: oper= null; break; } return oper; } }   工厂类中进行逻辑判断,最终得到要实例化的对象! 下面就用一个计算的实例来介绍:   //定义一个父类,来统一计算操作。  public class Operate { private int _numberA; private int _numberB; public int

简单工厂模式

谁说胖子不能爱 提交于 2020-03-22 18:26:54
一、简单工厂模式 简单工厂模式属于的创建型模式,通过专门定义一个类来负责创建其它类的实例化,被创建的实例通常都具有共同的父类或接口 二、结构图 Factory :工厂类,简单工厂模式的核心,它负责实现创建实例.工厂类中创建Product方法可以被外界直接调用。 IProduct :抽象产品类,它负责描述所有实例共有的公共接口 Product :具体产品类,是简单工厂模式的目标。 三、代码演示 通过水果的例子说明,首先我们需要一个抽象的水果接口 package 简单工厂模式; public interface Fruit { // 生产水果 public void get(); } 然后后我们还要创建具体的水果类(例:apple and Pear),并让其继承水果接口 public class Pear implements Fruit{ public void get() { // TODO Auto-generated method stub System.out.println("生产梨子!"); } } public class Apple implements Fruit { @Override public void get() { // TODO Auto-generated method stub System.out.println("生产苹果!"); } }

工厂模式——我有不止一个对象

二次信任 提交于 2020-03-19 14:58:12
3 月,跳不动了?>>> 3年工作经验是吧? 你知道工厂模式分为几类吗?他们都有什么区别? 那你说说你们项目中是怎么使用工厂模式的? 带着问题,尤其是面试问题的学习才是最高效的。加油,奥利给! 文章收录在 GitHub JavaEgg ,N线互联网开发必备技能兵器谱 工厂模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。 工厂模式可以分为三类: 简单工厂模式(Simple Factory) 工厂方法模式(Factory Method) 抽象工厂模式(Abstract Factory) 简单工厂其实不是一个标准的的设计模式。GOF 23种设计模式中只有「工厂方法模式」与「抽象工厂模式」。简单工厂模式可以看为工厂方法模式的一种特例,为了统一整理学习,就都归为工厂模式。 这三种工厂模式在设计模式的分类中都属于 创建型模式 ,三种模式从上到下逐步抽象。 创建型模式 创建型模式(Creational Pattern)对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。为了使软件的结构更加清晰,外界对于这些对象只需要知道它们共同的接口,而不清楚其具体的实现细节

java设计模式之简单工厂模式

和自甴很熟 提交于 2020-03-18 14:56:47
简单工厂模式的概念   就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。 简单工厂模式的UML图    简单工厂模式代码   学习简单工厂模式的时候我用的是一个与人类有相关的例子。人类在世界分为男人和女人,首先定义一个Human产品的抽象接口 /** * This is factory patter package */ package com.roc.factory; /** * 产品的抽象接口 人类 * @author liaowp * */ public interface Human { public void say(); } 然后定义男人和女人,同样都有说话的方法。 /** * This is factory patter package */ package com.roc.factory; /** * man 男人 * @author liaowp * */ public class Man implements Human { /* say method * @see com.roc.factory.Human#say() */ @Override public void say() { System.out.println("男人")

设计模式---简单工厂和工厂模式

坚强是说给别人听的谎言 提交于 2020-03-18 14:51:53
  这两天看了一下设计模式的书,觉得很不错,所以总结一下:   现在比如我们要写一个简单的计算器,你要实现的是 + , - , ×, /。   简单工厂的处理方式是:   一个抽象的运算类,其中一个抽象方法GetResult(),然后是加法类,减法类,除法类,乘法类都从运算类继承。一个工厂类中根据+ - × /来NEW出对应的类。 其实的好处是在客户端我们不需要了解类的实现,只要NEW一个运算器,根据符号得到对应的运算类,然后调用GetResult(),得到结果。   工厂模式的处理方法是:   在简单工厂的基础上,把工厂类改成抽象,然后通过继承工厂类分别形成加法工厂类,减法工厂类,除法......在客户端我们要通过具体的工厂类来NEW出对应的运算类。 来源: https://www.cnblogs.com/yujianjingjing/archive/2012/05/08/2489962.html

简单工厂模式概述

試著忘記壹切 提交于 2020-03-17 14:55:50
简单工厂模式概述 工厂方法的功能 1.根据应用环境和其他的因素,在层次类中选择一个类 2.创建所选择类的对象 3.返回给调用者所创建的对象(该对象的类型应该是层次类的超类类型即父类)​ 工厂方法的优点 1.使客户程序清晰:应用对象可以使用工厂方法访问合适类的对象,应用对象就不需要处理类的选择标准问题。 2.隐藏了创建对象的细节:因为不同的子类的对象需要以不同的方式创建,工厂方法将根据环境、客户选择而把创建对象的繁琐细节封装了起来。 3.可以不需要知道哪个具体类的对象被创建了:因为工厂方法返回给客户类的对象的类型为层次类的超类类型,所以客户类不需要知道哪个具体的子类的对象被创建了。 模式中的组件 Creator(工厂类): 1.简单工厂方法模式的核心 2.包含应用所需要的业务逻辑 3.工厂方法创建一个product类型的对象 Product组件: 1.JAVA接口或者抽象类 2.具体子类的共同接口 ConcreateProduct组件: 1.具体的JAVA类,实现其接口Product或者继承了Product 注释:parameter(参数) ​例1:汽车保险条款 利用简单工厂方法模式进行设计​,用于查询不同类型的汽车保险条款。 注释: 1.根据String Option参数的不同值,然后选择不同的保险 2.PolicyProducer属于工厂类 注释

简单工厂模式

假装没事ソ 提交于 2020-03-14 15:44:25
工厂:使用一个单独的类来做创造各种实例的过程(工厂类) 初学者代码毛病: 命名不规范 多个if判断导致每个if都要判断,多做无用功 除0判断,非法输入判断 代码应达到的要求:可维护(方便修改),可复用(能重复使用),可扩展(方便增加功能),灵活性好(方便调整功能,比如执行顺序) 设计模式使得程序更加灵活。 例: 项目地址 测试类: 1 public class testMain { 2 public static void main(String[] args) throws Exception { 3 Operation operation; 4 operation = OperationFactory.createOperate("/"); 5 operation.numberA = 12; 6 operation.numberB = 3; 7 System.out.println(operation.getResult()); 8 } 9 } 工厂类: 1 public class OperationFactory { 2 public static Operation createOperate(String operate){ 3 Operation op = null; 4 switch (operate){ 5 case "+": 6 op = new