简单工厂模式

简单工厂模式小结

╄→гoц情女王★ 提交于 2020-03-14 14:41:44
直觉地使用计算机机能理解的面向过程的方式去解决问题,会出现耦合的问题,是一种短期的方案,使得程序不容易维护与拓展。所以应该将面向对象的思想应用到程序设计当中,通过封装、继承、多态将程序的耦合度降低,运用设计模式增强程序的灵活性,使得它易于修改与复用。为了培养更好的编程思维与习惯,先从设计模式的学习与使用开始,希望有计划地学习设计模式,并且逐渐从了解到化为内用嘤嘤嘤!一、简单工厂模式:创建一个专门的类,使它根据情况创建不同类的对象,实现业务逻辑与界面逻辑的分离,降低耦合。 二、以实现简单计算器为例:创建基础运算抽象类继承抽象类,实现抽象类中的具体运算方法创建简单工厂类,由简单工厂类根据情况选定运算方法,即选定需要创建的类对象。 abstract class Operation{ private double numberA=0; private 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) {

Python简单工厂模式(字典实现)

佐手、 提交于 2020-03-08 15:57:52
工厂模式(工厂方法模式)是我们程序设计中比较经常使用的一种模式,为什么叫工厂模式,因为它的核心思想就是像工厂生产一样,我们只需要往工厂中输入原材料而不用管工厂是如何生产的,最终得到我们想要的产品,例如一个榨汁机,我们放入一个橙子榨出来的是一杯橙汁,放入一个苹果榨出来的就是一杯苹果汁。在程序设计中就类似于下面的代码。 可能在没有学设计模式的时候我们就用过这种方法,但是我们却不知道这其实就是简单工厂方法模式,当参数为 photo 的时候就调用 input_photo() 的方法,当输入参数为 video 的时候就调用 input_video() 的方法,然后返回不同的值,这就是最简单的工厂模式了,但是如果输入变得很多,十几个甚至更多,那么需要对每一个输入进行判断就需要一个 if 判断语句,程序看起来不美观,而且频繁地使用 if else 耗费大量的系统资源,降低了程序的性能,这并不是我们想要的结果。 def input_photo ( ) : print ( 'play photo' ) return 'photo' def input_video ( ) : print ( 'play video' ) return 'video' def inputProcess ( input ) : output = None if input == 'photo' : output =

简单工厂模式

亡梦爱人 提交于 2020-03-08 05:38:44
模拟一个简单的需求 设计一个简单的计算器,能够完成加减乘除的操作,并且能够设置运算的两个操作数(暂时不考虑计算器的界面)。 分析 思路1 可以创建一个计算器类,里面包含加减乘除的运算,以及设置获取操作数等操作,客户端直接创建一个计算器的对象,调用对应接口去执行运算。如果后续要添加新的运算,每次需要更改计算器类。 风险:由于新增操作每次要更改原来设计的类,可能会由于不小心改掉了原来的实现计算逻辑,从而导致原来正常运行的程序得不到正确的结果。 思路2 为每种运算单独设计一个类,客户端使用的时候可以根据不同的运算创建不同的对象,执行相应的操作。 由于每种运算符都有类似的操作,只是最终对数据执行的运算不一样,为了避免每个运算类写重复的代码,可以抽象出来一个运算类,包含公共的方法(设置操作数,获取操作数,获取计算结果等),具体运算类应该继承这个基类,在每个子类分别执行自己的运算。 此时,客户端需要使用运算器的时候,创建对象使用new的时候还是需要知道每个运算类的类名,若这些类分别在不同的头文件声明,使用这些类的时候还需要include一堆的头文件。如果要新增加运算符,上述的地方都要改动,很容易遗漏,非常的繁琐。 解决方案:由于创建的对象都是类似的对象(他们的父类都是同一个),可以创建一个类,提供一个静态方法,把创建具体类对象的工作都放到这个类中来完成,当客户端需要使用运算器的时候

简单工厂模式(非23种设计模式之列)

流过昼夜 提交于 2020-03-07 03:28:14
目录 概念 优缺点 优点 缺点 应用场景 模式角色组成 抽象产品(Product)角色 具体产品(Concrete Product)角色 工厂(Creator)角色 代码实现 抽象产品类 AbstractCar.java 具体产品类-奔驰车类 BenzCarImpl.java 具体产品类-保时捷车类 PorscheCarImpl.java 工厂类(二选一) CarFactoryFirst.java CarFactorySecond.java Client 客户端调用 CarFactoryDemo.java 简单工厂模式-控制台输出 概念 简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。 优缺点 优点 1、工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任,而仅仅“消费”产品; 2、简单工厂模式通过这种做法实现了对责任的分割,它提供了专门的工厂类用于创建对象。 3、客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可,对于一些复杂的类名,通过简单工厂模式可以减少使用者的记忆量。 4

XML解析器-简单工厂模式

最后都变了- 提交于 2020-03-03 13:52:26
SAX 的使用 import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class SaxTest1 { public static void main(String[] args) throws Exception, SAXException { //step1: 获得 SAX 解析器工厂实例 SAXParserFactory factory = SAXParserFactory. newInstance (); //step2: 获得 SAX 解析器实例 SAXParser parser = factory.newSAXParser(); //step3 :开始进行解析 parser.parse( new File( "students.xml" ), new MyHandler()); } } class MyHandler extends DefaultHandler { @Override public void startDocument()

PHP之设计模型分类(一)

别等时光非礼了梦想. 提交于 2020-03-01 08:38:21
经典的《设计模式》一书归纳出23种设计模式,本文按《易学设计模式》一书归纳分类如下: 1.创建型模式 前面讲过,社会化的分工越来越细,自然在软件设计方面也是如此,因此对象的创建和对象的使用分开也就成为了必然趋势。因为对象的创建会消耗掉系统的很多资源,所以单独对对象的创建进行研究,从而能够高效地创建对象就是创建型模式要探讨的问题。这里有6个具体的创建型模式可供研究,它们分别是: 简单工厂模式(Simple Factory); 工厂方法模式(Factory Method); 抽象工厂模式(Abstract Factory); 创建者模式(Builder); 原型模式(Prototype); 单例模式(Singleton)。 说明:严格来说,简单工厂模式不是GoF总结出来的23种设计模式之一。 2.结构型模式 在解决了对象的创建问题之后,对象的组成以及对象之间的依赖关系就成了开发人员关注的焦点,因为如何设计对象的结构、继承和依赖关系会影响到后续程序的维护性、代码的健壮性、耦合性等。对象结构的设计很容易体现出设计人员水平的高低,这里有7个具体的结构型模式可供研究,它们分别是: 外观模式(Facade); 适配器模式(Adapter); 代理模式(Proxy); 装饰模式(Decorator); 桥模式(Bridge); 组合模式(Composite); 享元模式(Flyweight)。 3

Charpter01简单工厂模式

半世苍凉 提交于 2020-02-29 11:48:36
一、UML类图 面向对象编程时,在整理对象之间关系时,用UML类图梳理,会更加清晰。 二、简单工厂模式 1.简单工厂模简介 简单工厂模式,利用一个工厂来生产不同类型的对象,达到服务层代码根据需求更改时,客户端代码接口不用进行修改。客户端可直接创建自己新增的需求对象并进行操作。由于比较简单,见代码很容易理解,故不做赘述。 2.C++代码如下 //定义基类操作数OperatorDP #ifndef _MOPERATORDP_HPP #define _MOPERATORDP_HPP class OperatorDP{ public: OperatorDP() = default; OperatorDP(double _num1, double _num2) : num1(_num1), num2(_num2){} double getNum1(){return num1;} double getNum2(){return num2;} void setNum1(double num){num1 = num;} void setNum2(double num){num2 = num;} virtual double getResult() = 0; // 虚函数 private: double num1; double num2; };#endif // 加法类 #ifndef

简单工厂模式——创建型模式

∥☆過路亽.° 提交于 2020-02-29 04:39:35
思路: 当我们需要实现一个计算器的简单程序的时候,我们会怎么写? class Program { static void Main(string[] args) { try { Console.Write("请输入数字A:"); String strNumberA = Console.ReadLine(); Console.Write("请选择运算符号(+、-、*、/):"); String strOperate = Console.ReadLine(); Console.Write("请输入数字B:"); String strNumberB = Console.ReadLine(); String strResult = ""; switch (strOperate) { case "+": strResult = Convert.ToString(Convert.ToDouble(strNumberA) + Convert.ToDouble(strNumberB)); break; case "-": strResult = Convert.ToString(Convert.ToDouble(strNumberA) - Convert.ToDouble(strNumberB)); break; case "*": strResult = Convert.ToString

简单工厂模式

房东的猫 提交于 2020-02-26 18:15:14
简单工厂模式是工厂模式的一种最简单的形式,该模式可以根据消费者的需求,生产固定的几种产品,且将生产产品(创建对象的行为逻辑隐藏起来) 我们举个简单的例子来说明: 上图是IDEA导出来的图片,我们有一个 Phone 的抽象接口 然后有很多具体的实现类,比如: Honor 。 有一个Phone的工厂类 PhoneFactory ,当用户想要手机的时候,调用工厂类的ProducePhone方法,可以根据手机品牌名称生产对应的手机。 接下来我们看代码: Phone接口: public interface Phone { ​ String getName (); } 荣耀手机: public class Honor implements Phone { ​ @Override public String getName () { return "荣耀" ; } } 华为手机: public class HuaWei implements Phone { @Override public String getName () { return "华为" ; } } 小米手机: public class Mi implements Phone { @Override public String getName () { return "小米" ; } } Oppo手机: public class

设计模式一:简单工厂模式

大憨熊 提交于 2020-02-23 15:59:48
概念理解: 1. 解耦 :一般通过增加一些抽象层,来实现 功能提供者和功能使用者 两者的解耦隔离。而如果想要扩展功能即增加功能,只需要添加相应的相应的新的功能类,修改中间的抽象类即可,并不用修改使用者部分的代码。并且功能提供者的代码可以复用。而且使得程序更容易理解。 简单工厂模式介绍 一.什么是简单工厂模式? 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个子类(这些子类继承 自一个父类或接口)的实例。 二.简单工厂模式包含的角色: 1.工厂角色(工厂类): 它负责创建所有的类的内部逻辑。当然工厂类必须能够被外界调用,创建所需要的产品对象。 2.抽象产品角色: 简单工厂模式所创建的所有对象的父类,注意,这里的父类可以是接口也可以是抽象类,它负责描述所有实例所共有的公共接口。 3.具体产品角色:简单工厂所创建的具体实例对象,这些具体的产品往往都拥有共同的父类。 三.简单工厂模式的类图 四.深入分析 1.核心思想: 有一个专门的类来负责创建实例的过程。 2. 优点:工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。用户在使用时可以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何创建以及如何组织的。有利于整个软件体系结构的优化。 3.缺点:由于工厂类集中了所有实例的创建逻辑,违反了 高内聚