简单工厂模式

设计模式之简单工厂模式

此生再无相见时 提交于 2019-12-28 11:22:16
工厂模式 概述: 工程结构说明: 界面类代码: .h: .cpp: 工厂类: .h: .cpp: 运算类: .h: .cpp: 加法类: .h: .cpp: 减法类: .h: .cpp: 乘法类: .h: .cpp: 除法类: .h: .cpp: 运行效果图: 概括: over: 概述: 利用实现计算器的案例实现一个简单的工厂设计模式,参考资料《大话设计模式》; 工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,它属于类创建型模式。 工厂方法模式是一种实现了“工厂”概念的面向对象设计模式。就像其他创建型模式一样,它也是处理在不指定对象具体类型的情况下创建对象的问题。 工厂方法模式的实质是“定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类。工厂方法让类的实例化推迟到子类中进行。” 工厂模式也是一种反射机制,可维护、可拓展、可复用(个人理解)。 工程结构说明: 简单说明:加、减、乘、除 都公有继承自运算类并重写基类虚函数,基类指向子类,子类重写基类虚函数此时触发多态,此案例也诠释C++封装、继承、多态的强大特性; 界面类代码: .h: # ifndef WIDGET_H # define WIDGET_H # include

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

我只是一个虾纸丫 提交于 2019-12-27 03:18:37
1. 工厂模式介绍 1.1 定义 简单工厂模式属于创建型模式又叫做静态工厂方法模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。 简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。 1.2 图片描述 Factory:工厂类,工厂模式的核心,负责实现创建具体产品类的业务逻辑,可以被外界直接调用,根据需要创建所需的具体产品实例对象。 Product:抽象产品类,所有具体对象的父类,提供所有子类实例公共的接口。 ConcreateProductA,ConcreateProductB:具体产品类,实现不同的接口,拥有共同继承父类的公共接口实现不同的业务需求。 2. 具体实现 2.1 创建抽象产品类 定义一个抽象的做饭类,有一个抽象方法make()用来做饭: public abstract class CookFood { /** * 做饭抽象类 */ public abstract void make ( ) ; } 2.2 创建产品类 定义三个具体的产品类,分别是做早饭,做午饭,做晚饭。并且都实现了父类的make()方法: public class CookBreakfast extends CookFood { @Override public void make ( ) { System . out . print (

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

巧了我就是萌 提交于 2019-12-23 02:12:37
简单工厂模式 (Simple Factory Pattern) 定义: 又叫静态工厂方法模式 (Static FactoryMethod Pattern), 是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。 类型:创建型模式 UML图 简单工厂模式中所包含的角色及其相应职责如下: 工厂 (Creator) 角色 : 简单工厂模式的核心,由它负责创建所有类的内部逻辑。当然工厂类必须能被外界调用,创建所需要的产品对象。 抽象产品 (Product) 角色 : 简单工厂模式所创建的所有对象的父类,注意,这里的父类可以是接口也可以是抽象类,它负责描述所有实例所共有的公共接口。 具体产品 (Concrete Product) 角色 :简单工厂所创建的具体实例对象,这些具体的产品往往都拥有共同的父类。 使用场景及代码实现 使用 Java 来编写一个计算器控制台程序,要求输入两个数和运算符号,得到结果 public abstract class Operation { protected double numA; protected double numB; public double getNumA() { return numA; } public void setNumA(double numA) { this.numA = numA; } public

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

梦想与她 提交于 2019-12-21 09:04:57
重要程度:4星(5星满分) 1.1. 模式动机 考虑一个简单的软件应用场景,一个软件系统可以提供多个外观不同的按钮(如圆形按钮、矩形按钮、菱形按钮等), 这些按钮都源自同一个基类,不过在继承基类后不同的子类修改了部分属性从而使得它们可以呈现不同的外观,如果我们希望在使用这些按钮时,不需要知道这些具体按钮类的名字,只需要知道表示该按钮类的一个参数,并提供一个调用方便的方法,把该参数传入方法即可返回一个相应的按钮对象,此时,就可以使用简单工厂模式。 1.2. 模式定义 简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。 1.3. 模式结构 简单工厂模式包含如下角色: Factory:工厂角色 工厂角色负责实现创建所有实例的内部逻辑 Product:抽象产品角色 抽象产品角色是所创建的所有对象的父类,负责描述所有实例所共有的公共接口 ConcreteProduct:具体产品角色 具体产品角色是创建目标,所有创建的对象都充当这个角色的某个具体类的实例。 1.4. 时序图 1.5. 代码分析 ////////////////////////////////

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

↘锁芯ラ 提交于 2019-12-20 01:18:31
$(function () { var userNameAlter=createPopup("alert","验证"); }); function createPopup(type,text){ var o=new Object(); o.content=text; o.show=function () { alert("显示"); } if(type=="alert"){ o.show(); } if(type=="promot"){ } if(type=="confirm"){ } return o; } 通过寄生式继承得到纯净的对象,虽然这个模式有很多的不足 来源: CSDN 作者: 半仙code 链接: https://blog.csdn.net/liz9411/article/details/103608485

简单工厂模式

情到浓时终转凉″ 提交于 2019-12-20 00:13:26
自己学习的过程中,简单记录一下,忘记了也能 很快回想起来。教科书是刘伟 编写的Java设计模式,因为 大学学习该门课程的时候,也是使用该作者编写的《设计模式》一书,所以感觉上比较熟悉。所写的博客仅为个人理解,并不代表书中作者思想,若有不对,望指正。 public class UserDao { public void findUserById(){ System.out.println("Base UserDao"); } } public class JDBCUserDao extends UserDao { @Override public void findUserById() { System.out.println("JDBCUserDao"); } } public class HibernateUserDao extends UserDao { @Override public void findUserById() { System.out.println("HibernateUserDao"); } } public class UserDaoFactory { public static UserDao createUserDao(int arg){ if(arg==0){ return new JDBCUserDao(); }else { return new

工厂模式--简单工厂模式

瘦欲@ 提交于 2019-12-19 01:24:27
工厂模式用于实现逻辑的封装,并通过公共的接口提供对象的实例化服务,在添加新的类时装修要做少量的修改。 1.简单工厂模式 通过反射机制进行类注册的简单工厂模式 通过反射机制注册产品类对象和实例化 注册产品对象并向每个产品添加newInstance方法,该方法返回与自身类型相同的新实例 //实例对象父类 public class Vehicle { } //vehicle工厂类public class VehichleFactory { // 用map对象保存产品ID及其对应的分类 private static Map<String, Class> registeredProducts = new HashMap<String, Class>(); // 注册vehicle public void registerVehicle(String type,Class vehicleClass) { registeredProducts.put(type, vehicleClass); } //获取vehicle实列对象 public Vehicle createVehicle(String type) throws InstantiationException, IllegalAccessException { Class vehicleClass =

【转载】设计模式也可以这么简单

為{幸葍}努か 提交于 2019-12-18 05:43:23
一直想写一篇介绍设计模式的文章,让读者可以很快看完,而且一看就懂,看懂就会用,同时不会将各个模式搞混。自认为本文还是写得不错的😂😂😂,花了不少心思来写这文章和做图,力求让读者真的能看着简单同时有所收获。 设计模式是对大家实际工作中写的各种代码进行高层次抽象的总结,其中最出名的当属 Gang of Four ( GoF ) 的分类了,他们将设计模式分类为 23 种经典的模式,根据用途我们又可以分为三大类,分别为创建型模式、结构型模式和行为型模式。 有一些重要的设计原则在开篇和大家分享下,这些原则将贯通全文: 面向接口编程,而不是面向实现。这个很重要,也是优雅的、可扩展的代码的第一步,这就不需要多说了吧。 职责单一原则。每个类都应该只有一个单一的功能,并且该功能应该由这个类完全封装起来。 对修改关闭,对扩展开放。对修改关闭是说,我们辛辛苦苦加班写出来的代码,该实现的功能和该修复的 bug 都完成了,别人可不能说改就改;对扩展开放就比较好理解了,也就是说在我们写好的代码基础上,很容易实现扩展。 创建型模式比较简单,但是会比较没有意思,结构型和行为型比较有意思。 创建型模式 创建型模式的作用就是创建对象,说到创建一个对象,最熟悉的就是 new 一个对象,然后 set 相关属性。但是,在很多场景下,我们需要给客户端提供更加友好的创建对象的方式,尤其是那种我们定义了类

简单工厂模式与工厂方法模式的区别

与世无争的帅哥 提交于 2019-12-15 13:43:18
转发请注明出处: http://blog.csdn.net/qq_28055429/article/details/51628921 One----简单工厂模式: 一,基本知识: (1)定义: 简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。 (2)理解: 简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例 。简单工厂模式是工厂模式家族中最简单实用的模 式,可以理解为是不同工厂模式的一个特殊实现。 二,实现方法和角色: (1)实现方式: 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个 父类或接口)的实例。 (2)角色和责任 :如图: 工厂(Creator)角色 :简单工厂模式的 核心 ,它负责实现创建所有实例的内部逻辑。 工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象。 抽象产品(Product)角色: 简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。 具体产品(Concrete Product)角色: 是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。 三,优缺点: (1)优点: 在于工厂类中包含了必要的逻辑,根据客户需要的条件动态实例化相关的类, 对客户端来说

设计模式——简单工厂模式

岁酱吖の 提交于 2019-12-14 07:21:00
简单工厂模式 又称为静态工厂模式,实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。 简单工厂模式的优点 在于实现对象的创建和对象的使用分离,将对象的创建交给专门的工厂类负责,但是其最大的缺点在于工厂类不够灵活,增加新的具体产品需要修改工厂类的判断逻辑代码,而且产品较多时,工厂方法代码将会非常复杂。 因此适用于工厂类负责创建的对象比较少的情况 以手机为例,我们可以认为不同品牌,型号的的手机都属于手机这个类别,那么假设我们要得到一个具体型号的手机,就可以写成简单工厂模式来获取。 1,首先定义手机这个东西的抽象接口 //苹果手机 public abstract class Phone{ //获取手机名称 public void getName(); } 2,定义HuaWeiP30 ,Xiaomi9 ,iphoneXR 这三个具体型号的手机。 public class HuaWeiP30 implements ApplePhone{ @Override public void getName() { Console.WriteLine("HuaWeiP30 手机"); } } public class Xiaomi9 implements Phone{