[大话设计模式]学习笔记——简单工厂模式

说好的每天进步一点点的,结果工作太忙,一直在加班,都没有学习新东西。我还要进BAT呢。

坚持每天学习新东西。

写代码时,意识到在代码结构上还是有点欠缺。赶紧补上。

纪录对设计模式的认识。小菜变大鸟。进攻BAT。

应用场景:

编写一个计算器控制台程序,要求输入两个数和运算符号,得到结果。

这本书使用C#写的。已有博主用JAVA写出来,参考:http://blog.csdn.net/ghsau/article/details/8163418

常见的做法:

写一个方法封装计算机的功能,我们只需传参调用此方法就OK。

public static double getResult(double numA, double numB, String operate)

分析:

体现了面向对象的封装

这样要增加计算器的功能就需要改此方法。再者,编译时,其他方法也需要参与进来。代码耦合性太高。

最好的做法应该将加减乘除各种运算分离开来。

使用简单工厂设计模式的做法:

1.创建抽象运算类,定义公共的成员变量,和getResult()抽象方法。

2.创建加,减,乘,除具体的类继承抽象运算类,实现getResult()方法

分析:

表现出面向对象的继承

如果需要添加运算,只需要创建一个新的类继承运算类

问题来了,我们怎么知道什么时候该创建哪个类的对象呢?

这时,就需要一个单独的类来管理这些具体的运算类。这个类就体现简单工厂设计模式。也用到了多态

    public class OperationFactory {  

        public static Operation createOperation(String operate) {
            Operation op = null;
            if(operate == null)
                throw new RuntimeException("运算符不能为空!");
            else if(operate.equals("+"))
                op = new AddOperation();
            else if(operate.equals("-"))
                op = new SubOperation();
            else if(operate.equals("*"))
                op = new MulOperation();
            else if(operate.equals("/"))
                op = new DivOperation();
            else
                throw new RuntimeException("运算符错误!");
            return op;
        }
    }  

一张UML类图就能清晰表现简单工厂设计模式

总结

工厂角色(Creator):这是简单工厂模式的核心,由它负责创建所有的类的内部逻辑。当然工厂类必须能够被外界调用,创建所需要的产品对象。

抽象(Product)产品角色:简单工厂模式所创建的所有对象的父类,注意,这里的父类可以是接口也可以是抽象类,它负责描述所有实例所共有的公共接口。

具体产品(Concrete Product)角色:简单工厂所创建的具体实例对象,这些具体的产品往往都拥有共同的父类。

核心思想就是:有一个专门的类来负责创建实例的过程。

把产品看着是一系列的类的集合,这些类是由某个抽象类或者接口派生出来的一个对象树。而工厂类用来产生一个合适的对象来满足客户的要求。

如果简单工厂模式所涉及到的具体产品之间没有共同的逻辑,那么我们就可以使用接口来扮演抽象产品的角色;如果具体产品之间有功能的逻辑,我们就必须把这些共同的东西提取出来,放在一个抽象类中,然后让具体产品继承抽象类。为实现更好复用的目的,共同的东西总是应该抽象出来的。

时间: 2024-10-14 00:59:09

[大话设计模式]学习笔记——简单工厂模式的相关文章

设计模式学习笔记--简单工厂模式

背景: 在开发过程中,经常会创建大量的对象,创建对象后还会涉及到一系列的初始化操作,而我们也不一定会只是在创建对象之后马上就使用对象,而且如果初始化操作很复杂,代码看起来就会非常杂乱,如果有变动,所有的初始化操作都要进行修改,相当难以维护. 功能: 将对象的创建和使用分离开来,专门用于创建对象并初始化.并且进行扩展后,可以根据参数不同,创建不同的对象. 例子: // 设计模式Demo.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #includ

设计模式学习(二)-简单工厂模式

---恢复内容开始--- 简单工厂设计模式 简单工厂模式定义: 简单工厂设计模式又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式.在简单工厂模式中,可以根据参数的不同返回不同类的实例.简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 简单工厂主要分为如下几个角色 抽象产品(abstract product):为所有具体产品的抽象表现,一般为抽象类 具体产品(product):为抽象产品的具体实现 生成产品工厂(facto

大话设计模式C++版——简单工厂模式

简单工厂模式应该是所有设计模式中最简单,也最基础的一种模式,以下是一个简单的采用工厂模式写一个加减法的计算器. 1.抽象接口类--依赖倒转原则(高层和底层都要依赖于抽象,针对接口编程) class IOperation { public: IOperation() : m_nNuml(0), m_nNumr(0) {} virtual ~IOperation() {} virtual void SetNum(int nNuml = 0, int nNumr = 0) { m_nNuml = nN

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

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

Java设计模式学习记录-简单工厂模式、工厂方法模式

前言 之前介绍了设计模式的原则和分类等概述.今天开启设计模式的学习,首先要介绍的就是工厂模式,在介绍工厂模式前会先介绍一下简单工厂模式,这样由浅入深来介绍. 简单工厂模式 做法:创建一个工厂(方法或类)用来制造对象. 当一个人想要用手机的时候,需要自己创建手机然后来使用. 如下: public class IphoneX { public IphoneX(){ System.out.println("##### 制造iphoneX #####"); } } public class I

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

简单工厂模式,其实就是有一个静态的工厂方法,可以根据输出的条件返回对应的实例,然后再条用具体的实例的方法执行计算. 简单工厂模式相当与将条件判断都集中到了一个静态的工厂方法中.这样的好处是,执行具体计算任务的代码不需要再有很多的if判断,只专注于具体的计算.如果有新的计算需求,那么只需要增加相应的计算方法,并且在工厂方法中添加对应的入口条件就行了,对原有的计算方法没有任何影响. 一个简单计算器的实现例子如下 计算的类型接口: /** * @author wgyang * Create time:

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

简单工厂模式 第一步, 创建父类A(抽象类),抽象方法,以及具体变量 第二步, 创建工厂类父类B,用于实现创建抽象类A 第三步, 创建要子类C,继承父类A,重载父类方法,写方法具体实现,以及变量具体赋值. 第四步, 创建工厂类D,继承工厂类父类B,用来创建具体实现的 子类C (相当于AC  是工厂里面的模板) (BD 是工厂里面生产的产品) 简单工厂模式,备忘

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

1 简单工厂模式--uml   继承关系--空心三角形--实线 实线接口 空心三角形--实虚线 聚合关系  空心菱形---实线箭头    雁群和大雁 组合关系-  实心菱形---实线箭头   鸟和翅膀 依赖关系-虚线箭头  如动物需要氧气和水  d 简单工厂模式demo--本地demo 库 原文地址:https://www.cnblogs.com/spps/p/9942846.html

设计模式学习笔记--抽象工厂模式

1 using System; 2 3 namespace AbstractFactory 4 { 5 /// <summary> 6 /// 作者:bzyzhang 7 /// 时间:2016/5/28 10:23:20 8 /// 博客地址:http://www.cnblogs.com/bzyzhang/ 9 /// User说明:本代码版权归bzyzhang所有,使用时必须带上bzyzhang博客地址 10 /// </summary> 11 public class Use