当前位置:首页 > 技术知识 > 正文内容

设计模式——简单工厂模式(理论)_简单工厂模式与工厂方法模式

maynowei9个月前 (09-29)技术知识108

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

一. 活字印刷,面向对象

三国时期,曹操带领百万大军攻打东吴,大军在长江赤壁驻扎,军船连成一片,眼看就要灭掉东吴,统一天下,曹操大悦,于是大宴众文武,在酒席间,曹操诗性大发,不觉呤道:“喝酒唱歌,人生真爽。······”。众文武齐呼:“丞相好诗!”于是一臣子速命印刷工匠刻板印刷,以便流传天下。

样张出来给曹操一看,曹操感觉不妥,说道:“喝与唱,此话过俗,应改为‘对酒当歌’较好!”,于是此臣就命工匠重新来过。工匠眼看连夜刻板之工,彻底白费,心中叫苦不迭。只得照办。

样张再次出来请曹操过目,曹操细细一品,觉得还是不好,说:“人生真爽太过直接,应改问语才够意境,因此应改为‘对酒当歌,人生几何?······’”,当臣子转告工匠之时,工匠晕倒······!

如果有了活字印刷,则只需要改四个字就可,其余工作都未白做。

第一,要改,只需要改要改之字,此为可维护;第二,这些字并非用完这次就无用,完全可以在后来的印刷中重复使用,此乃可复用;第三,此诗若要加字,只需另刻字加入即可,这是可扩展;第四,字的排列其实可能是竖排可能是横排,此时只需将活字移动就可做到满足排列需求,此是灵活性好

二. 面向对象的好处

通过封装、继承、多态把程序的耦合度降低,传统印刷术的问题就在于所有的字都刻在同一版面上造成耦合度太高所致,开始用设计模式使得程序更加灵活,容易修改,并且易于复用

三. 业务的封装

让业务逻辑与界面逻辑分开,让它们之间的耦合度下降。只有分离开,才可以达到容易维护或者扩展。

四. 简单工厂模式

简单工厂模式又称为静态工厂模式,实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。

其实就是将一个具体类的实例化交给一个静态工厂方法来执行,它不属于设计模式里的23种设计模式,但现实中却经常会用到,而且思想也非常简单。

也就是说:“到底要实例化谁,将来会不会增加实例化的对象,应该考虑用一个单独的类来做这个创造实例的过程,这就是工厂”。

工厂就是实例化出合适的对象,通过多态,返回父类的方式。

简单工厂模式包含如下角色:


Factory:工厂角色:是简单工厂模式的核心,它负责实现创建所有具体产品类的实例。工厂类可以被外界直接调用,创建所需的产品对象。


Product:抽象产品角色:是所有具体产品角色的父类,它负责描述所有实例所共有的公共接口。


ConcreteProduct:具体产品角色:继承自抽象产品角色,一般为多个,是简单工厂模式的创建目标。工厂类返回的都是该角色的某一具体产品。


五. 总结

创建型模式对类的实例化过程进行了抽象,能够将对象的创建与对象的使用过程分离。

简单工厂模式又称为静态工厂方法模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。

简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

简单工厂模式包含三个角色:工厂角色负责实现创建所有实例的内部逻辑;抽象产品角色是所创建的所有对象的父类,负责描述所有实例所共有的公共接口;具体产品角色是创建目标,所有创建的对象都充当这个角色的某个具体类的实例。

简单工厂模式的要点在于:当你需要什么,只需要传入一个正确的参数,就可以获取你所需要的对象,而无须知道其创建细节。

简单工厂模式最大的优点在于实现对象的创建和对象的使用分离,将对象的创建交给专门的工厂类负责,但是其最大的缺点在于工厂类不够灵活,增加新的具体产品需要修改工厂类的判断逻辑代码,而且产品较多时,工厂方法代码将会非常复杂。

简单工厂模式适用情况包括:工厂类负责创建的对象比较少;客户端只知道传入工厂类的参数,对于如何创建对象不关心。

相关文章

有了这份900多页的Android面试指南,你离大厂Offer还远吗?

前言对于大部分程序员来说,一线互联网是的工作经历是毕生的追求,实际上大厂对于学历的要求远远没有我们想象的那么高,近几年来,互联网公司更注重技术,所以提升自身技术水平才是斩获offer的制胜关键。一线互...

C语言进阶教程:线程同步:互斥锁、条件变量与信号量

在多线程编程中,线程同步是确保数据一致性和程序正确性的关键。当多个线程需要访问共享资源时,如果缺乏适当的同步机制,就可能导致竞态条件(Race Condition)、死锁(Deadlock)等问题。本...

Google前工程主管“入住”Oracle(google公司前台)

ZDNet至顶网服务器频道 10月11日 新闻消息:Oracle 已聘用了前 Snapchat 和 Google 工程部主管 Peter Magnusson,其主要的职责是运行一个被重新调整过的 of...

你可能疏忽的plsql和navicat连接Oracle注意点

在日常开发中,我们总是少不了要连接数据库,你是否遇到过填写的账号、密码、连接地址都对,但就是连接不上Oracle的情况?这里说一下其中一种连接不上Oracle的原因,这种情况简单,但很可能被疏忽。记下...

超详细的Oracle19c修改数据库用户名教程

概述由于开发很多视图指定了某个用户名,故需修改数据库用户名srmpro为srm。以下为操作过程..1、停止应用防止修改用户名密码后应用一直在发起错误连接,可事先查询哪个IP在连接数据库,然后断开对应连...

Oracle公布Java9未来进度表(oracle的未来)

作为1995年由Sun公司推出的产品,Java既是指一种程序设计语言,也包含了Java平台。因其平台无关、安全、高性能、自动垃圾回收等特点,Java已经推出便受到广泛应用。Java软件开发工具包(Ja...