第4章_单件模式+工厂系列模式
- 格式:ppt
- 大小:1.90 MB
- 文档页数:57
单件流生产模式的概念单件流生产模式是一种生产系统,其核心思想是将一个产品从生产过程的开始一直到完成的结束,始终保持连续流动的生产状态。
单件流生产模式强调以单件的方式处理产品,避免产品间的等待和库存,并通过工作站的平衡和优化,实现生产效率的最大化。
单件流生产模式的基本原则是:1. 以顾客需求为导向:单件流生产模式从顾客需求出发,通过对每个工作站操作时间和工艺进行优化,使得每个产品的生产时间缩短,降低交货周期。
2. 点对点的传递:产品在生产过程中,通过点对点传递的方式,从一个工作站顺序传递到下一个工作站,避免了产品在不同工作站之间的存储和等待,提高了整体生产效率。
3. 实现无库存:单件流生产模式通过工作站的平衡和优化,使得所有工作站的生产节奏一致,避免了产品之间的等待,最终实现了无库存的生产状态。
4. 强调灵活性和敏捷性:单件流生产模式注重灵活性和敏捷性,使得生产系统能够快速适应市场需求的变化,提高企业的竞争能力。
单件流生产模式的优点有:1. 减少库存:由于每个产品在生产过程中不会停留在任何一个工作站,因此可以显著降低库存水平,减少仓储成本和风险。
2. 缩短交货周期:单件流生产模式通过优化每个工作站的操作时间和工艺,使得产品的生产时间缩短,可以更快地响应顾客需求,缩短交货周期。
3. 提高生产效率:单件流生产模式通过工作站的平衡和优化,实现了生产效率的最大化,降低了非价值添加时间,减少浪费,提高了工序的利用率。
4. 降低生产成本:由于单件流生产模式可以减少库存和浪费,提高生产效率,因此可以降低生产成本,提高企业的利润空间。
单件流生产模式的缺点有:1. 对生产系统要求高:单件流生产模式要求生产系统具备高度的灵活性和敏捷性,且对产品工艺、工序之间的配合要求高,企业需要投入大量的资源和精力进行调整和优化。
2. 人员素质要求高:由于单件流生产模式要求产品在工作站之间的连续流动,需要工人具备高度的技能和操作能力,对员工的培训和素质要求较高。
国家开放大学《ERP原理与应用》章节自测参考答案第1章ERP系统概念导入一、单选题(共10题,每题5分)1.以下哪项不是ERP系统的基本组成部分()。
A. 物流管理B. 工作流C. 生产计划D. 财务管理2.下列不属于ERP系统财务管理的基本组成部分的是()。
A. 会计核算B. 客户服务C. 财务计划D. 财务分析3.易飞ERP的每一支作业,都可以对每一个用户的工作权责进行授权。
这种管理在ERP中被称为()。
A. 工作管理B. 权限管理C. 职责管理D. 员工管理4.以下哪项不是ERP系统的基本组成部分()。
A. 物流管理B. 企业外部管理C. 生产计划D. 财务管理5.ERP系统的核心是()。
A. 生产计划与控制管理B. 财务管理C. 物料相关需求D. 物料需求6.属于物流管理的是下面的哪一项()。
A. 销售、采购、库存B. 计划、制造C. 会计核算、财务管理D. 人事、工资管理7.下列不属于ERP系统生产计划与控制管理的组成部分的是()。
A. 供应商信息管理B. 主生产计划C. 物料需求计划D. 能力需求计划8.“录入客户订单”业务属于()。
A. 库存管理子系统B. 销售管理子系统C. 生产管理子系统D. 采购管理子系统9.下列哪项不属于ERP系统主流程中的关键环节()。
A. 销售管理B. 库存管理C. 人员管理D. 采购管理10.生产计划与控制活动不包括下面的哪一项()。
A. 物料的购买与采集B. 主生产计划的制定C. 物料需求计划的制定D. 能力需求计划的制定二、判断题(共10题,每题5分)11.通过批次需求计划运算,生成“批次生产计划”和“批次采购计划”。
(√)12.易飞系统软件出货时,都会预先设置一个登录者是超级用户。
这是给信息中心维护人员维护系统的最高权限,须设置密码并妥善管理。
(√)13.ERP系统最基本的管理模块有物流管理、财务管理、生产管理、人力资源管理。
(√)14.一般的管理主要包括3方面的内容:生产控制、物流管理和财务管理。
三、题目预测填空题:1.请从外观、组合、工厂方法、模板方法、观察者、单件、抽象工厂、命令、迭代器、代理、适配器模式中选择7种填入下列的空缺中。
P6101) 工厂方法模式中,父类负责定义创建对象的公共接口,子类决定要创建的具体类是哪一个。
2) 抽象工厂模式提供一系列相关或相互依赖对象的接口而无需指定它们具体的类。
3) 单件模式确保某一个类仅有一个实例,并自行实例化并向整个系统提供这个实例。
4) 组合模式将对象组合成树形结构以表示“部分-整体”的层次结构。
使得用户对单个对象和组合对象的使用具有一致性。
5) 外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用,为子系统中的一组接口提供一个一致的界面,简化了一群类的接口。
6) 观察者模式定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新,也就是让对象能在状态改变时被通知。
7) 模板模MVC模型式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。
8) 迭代器模式在对象的集合之中游走,而不暴露集合的实现。
9) 代理模式包装对象,以控制对比对象的访问。
10) 适配器模式封装对象,并提供不同的接口。
2.工厂模式分为(简单工厂),(工厂方法),(抽象工厂)三种类型。
3.适配器模式,分为类的适配器和对象的适配器两种实现。
其中类的适配器采用的是(继承)关系,而对象适配器采用的是(组合聚合)关系。
4.设计模式的基本要素有(名字),(意图),(问题),(解决方案),(参与者与协作者),(实现),(一般性结构)。
5.MVC模型的基本工作原理是基于(观察者)模式,实现是基于(命令)模式6.面向对象的六条基本原则包括:开闭原则,里式代换原则,合成聚合原则以及(依赖倒转),(迪米特法则)(接口隔离)。
7.当我们想用不同的请求对客户进行参数化时,可以使用(命令)模式。
8.当我们想封装不同算法并使它们可相互替换时,可以使用(策略)模式。
工厂模式,工厂方法模式,单例模式,外观(Facade)模式,观察者(Observer)模式,桥接(Bridge)模式都是比较常用的,不同的项目有不同的设计方向,可以参考的设计模式也不尽相同,没有定数,只是上面这几个模式用的比较多一些。
其他的模式我找了一下,都列出来了。
======================Java常用的设计模式创建型模式1、FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM 爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。
麦当劳和肯德基就是生产鸡翅的Factory工厂模式:客户类和工厂类分开。
消费者任何时候需要某种产品,只需向工厂请求即可。
消费者无须修改就可以接纳新产品。
缺点是当产品修改时,工厂类也要做相应的修改。
如:如何创建及如何向客户端提供。
2、BUILDER—MM最爱听的就是“我爱你”这句话了,见到不同地方的MM,要能够用她们的方言跟她说这句话哦,我有一个多种语言翻译机,上面每种语言都有一个按键,见到MM我只要按对应的键,它就能够用相应的语言说出“我爱你”这句话了,国外的MM也可以轻松搞掂,这就是我的“我爱你”builder。
(这一定比美军在伊拉克用的翻译机好卖)建造模式:将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。
建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。
建造模式可以强制实行一种分步骤进行的建造过程。
3、FACTORY METHOD—请MM去麦当劳吃汉堡,不同的MM有不同的口味,要每个都记住是一件烦人的事情,我一般采用Factory Method模式,带着MM到服务员那儿,说“要一个汉堡”,具体要什么样的汉堡呢,让MM直接跟服务员说就行了。
工厂方法模式:核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。
JIT单件流生产模式简介大纲什么是JIT²建立JIT模式的目的²建立JIT生产模式的目标²JIT生产模式的特点²JIT生产线的基本要求²JIT生产模式注意事项²JIT生产模式的建立条件²JIT生产模式的局限性英文:CELLPRODUCTIONUNIT中文:单元一件生产模式一、什么是JIT:(单件流生产模式)简而言之:它就像一根链子,按照衣服的流程,实行零部件一件流,组装一件流,在避免制造不良品的同时,将成品经由生产流程一个一个的制造出来。
二、目的:消除隐藏在企业内的各种浪费,以获得更多的利益。
浪费包括:等待的浪费、库存的浪费、搬运的浪费、动作的浪费、不良的浪费、加工的浪费、制造过多过早的浪费。
三、标:建立弹性化单件流的生产线,确保做到成本降低,效率翻倍,浪费减少,确保提高品质与服务质量,满足客人交期四、特点:改善成果快速。
好处:1、容易发现问题,品质能得到有效控制,减少返工量。
2、减少浮点,提高效能,工序与工序之间按接力赛形式流水,减少解包、绑包和对裁片的时间,缩短裁片取送距离和传送时间,从而提高生产效率。
五、建立JIT流线化生产条件及生产线基本要求。
(一)JIT流线化生产条件:1、单件流2、按流程顺序布置设备3、生产速度的同步化4、多工序操作的作业5、作业员的多能化6、车位布置的U型化(二)JIT生产模式的基本要求1、工序平衡(工序安排平衡)2、组员之间的协调3、零部件小包流或一包流,组装一件流4、车台布局方便员工作业传递六、JIT生产模式注意事项:1、组员对JIT的认识及实际操作中的作用。
2、产前充分准备3、控制生产线堆积量4、人员安排要达到前推后拉5、及时处理故障6、对要外发(如手缝、专机)必须先做,但在流到下一个工序时必须按开货顺序发货。
七、CPU生产模式的建立:1、全员的意识改革,尤其是管理人员。
只有观念改变,改善活动才能有效地进行。
简单⼯⼚(SimplePattern)模式⼀、简单⼯⼚(Simple Factory)模式Simple Factory 模式根据提供给它的数据,返回⼏个可能类中的⼀个类的实例。
通常它返回的类都有⼀个公共的⽗类和公共的⽅法。
Simple Factory 模式实际上不是 Gof 23个设计模式中的⼀员。
⼆、简单⼯⼚(Simple Factory)模式⾓⾊与结构⼯⼚类⾓⾊Creator (LightSimpleFactory):⼯⼚类在客户端的直接控制下(Create⽅法)创建产品对象。
抽象产品⾓⾊Product (Light):定义简单⼯⼚创建的对象的⽗类或它们共同拥有的接⼝。
可以是⼀个类、抽象类或接⼝。
具体产品⾓⾊ ConcreteProduct (BulbLight, TubeLight):定义⼯⼚具体加⼯出的对象。
三、简单⼯⼚(Simple Factory)模式演化1) Simple Factory 模式演化(⼀)除了上⾯的⽤法外,在有些情况下Simple Factory可以有抽象产品⾓⾊扮演,⼀个抽象产品类同时是⼦类的⼯⼚。
2) Simple Factory 模式演化(⼆)三个⾓⾊全部合并:与单例模式(Singleton)相近,但是有区别。
四、有点与缺点优点: ⼯⼚类含有必要的判断逻辑,可以决定什么时候创建哪⼀个产品类的实例,客户端可以免除直接创建产品对象的责任,⽽仅仅“消费”产品。
简单⼯⼚模式通过这种做法实现了对责任的分割。
缺点: 当产品有复杂的多层等级结构时,⼯⼚类只有⾃⼰,以不变应万变,就是模式的缺点。
因为⼯⼚类集中了所有产品创建逻辑,⼀旦不能正常⼯作,整个系统都要受到影响。
同时,系统扩展困难,⼀旦添加新产品就不得不修改⼯⼚逻辑,有可能造成⼯⼚逻辑过于复杂。
另外,简单⼯⼚模式通常使⽤静态⼯⼚⽅法,这使得⽆法有⼦类继承,造成⼯⼚⾓⾊⽆法形成基于继承的等级结构。
吉林大学2014级软件设计模式期末试题(A卷)-软件2016-2017学年第1学期2014级《软件设计模式》考试试题A(开卷)考试时间:2016年11月班级学号姓名本试卷满分100分;请将答案写在答题纸上,写明题号,不必抄题,字迹工整、清晰;试题中使用C++语言作为描述语言,答题时可以使用C++或Java 或C#程序设计语言中的任意一种作为描述语言,但整个卷面只能使用其中一种,不得混合使用;请在答题纸和试题纸上都写上你的班级,学号和姓名,交卷时请将试题纸、答题纸和草纸一并交上来。
一、单选题(共20分,每题2分)1.下列选项中属于设计模式主要优点的是:(A)程序易于理解(B)减少程序最终代码量(C)适应需求变化(D)简化软件系统的设计2.Open-Close原则的含义是一个软件实体:(A)应当对扩展开放,对修改关闭(B)应当对修改开放,对扩展关闭(C)应当对继承开放,对修改关闭(D)以上都不对3.下列选项中属于面向对象设计原则的是:(A)抽象(B)封装(C)里氏替换(D)多态性4.设计模式的关键要素不包括:(A)名称(B)问题(C)解决方案(D)实现5.下列选项中不属于创建型模式的是:(A)抽象工厂模式(B)外观模式(C)工厂方法模式(D)单件(单例)模式6.用于分离接口和具体实现,使得接口和实现可独立变化的是:(A)适配器模式(B)桥接模式(C)命令模式(D)模板方法模式7.体现“集中管理多个对象间的交互过程和顺序”的是:(A)状态模式(B)门面模式(C)策略模式(D)中介者模式8.限制类的实例对象只能有一个的是:(A)观察者模式(B)工厂方法模式(C)单件(单例)模式(D)生成器模式9.描述对象所能接受的全部请求的集合的是:(A)型构(B)接口(C)类型(D)超类型10.用于为一个对象添加更多功能而不使用子类的是:(A)桥接模式(B)适配器模式(C)代理模式(D)装饰器模式二、简答题(共30分,每题10分)1.银行信用卡中心的电子账单系统包括了发送器、账单、广告信和发送队列等对象,其中广告信的业务逻辑是:先到数据库中把客户信息一个一个的取出,每个客户都生成一份个性化的邮件,然后交给发送机进行发送处理。
工厂设计模式工厂设计模式是一种创建型设计模式,用于创建对象而不需要指定具体的类。
它通过提供一个接口,让子类决定实例化哪个类。
工厂设计模式将对象的创建逻辑封装在工厂类中,客户端只需要通过工厂类来创建对象,而不需要关心具体的实现细节。
这样可以将对象的创建与使用分离,提高系统的灵活性和可维护性。
工厂设计模式包含三个主要角色:抽象产品、具体产品和工厂类。
抽象产品是一个接口或抽象类,定义了产品的共同属性和方法。
具体产品继承了抽象产品,实现了具体的功能。
工厂类负责创建具体产品的对象,它通常包含一个工厂方法,用于创建产品对象。
工厂设计模式适用于以下情况:1.当一个类无法预知它所需的对象的具体类型时,可以使用工厂设计模式。
通过工厂方法来创建对象,可以根据需要返回不同的具体对象。
2.当创建一个对象需要复杂的逻辑处理时,可以使用工厂设计模式。
将对象的创建逻辑封装在工厂类中,可以降低客户端的复杂性。
3.当系统需要多种类型的对象时,可以使用工厂设计模式。
通过工厂方法可以灵活地创建不同类型的对象,满足系统的需求。
工厂设计模式的优点是:1.封装了对象的创建逻辑,降低了客户端的复杂性。
2.提高了系统的灵活性和可维护性。
通过工厂方法,可以动态地创建不同类型的对象,而不需要修改客户端的代码。
3.符合开闭原则。
增加新的具体产品时,只需要创建一个新的具体产品类和对应的工厂类即可,不需要修改其他代码。
工厂设计模式的缺点是:1.增加了系统的复杂性。
引入了额外的工厂类和产品类,增加了代码的复杂性和维护成本。
总结起来,工厂设计模式是一种创建对象的设计模式,它将对象的创建逻辑封装在工厂类中,客户端通过工厂类来创建具体对象,从而实现了对象的创建与使用的分离。
它适用于对象的创建逻辑复杂、对象类型不确定或者需要动态创建对象的情况。
这种模式可以提高系统的灵活性和可维护性,但也增加了系统的复杂性。
一、填空。
1、软件体系结构风格和设计模式都是可重复使用的软件设计问题解决方案。
二者的区别在于_____是从___和_____的层次描述问题,粒度较大;______是从___和_____的层次描述问题,粒度较小;2、Wright的定义包括三部分,第一部分定义了一组,第二部分定义了,第三部分定义了一组联接,指明了之间的关联。
3、信号处理系统属于___________风格的软件体系结构,数据库系统是___________风格的软件体系结构,电子邮件系统属于___________风格的软件体系结构。
4、Abstract Factory经常用模式实现。
5、工厂模式有____、_____等类型。
6、设计模式中应优先使用而不是7、模式确保某一个类仅有一个实例,并自行实例化向整个系统提供这个实例。
8、模式只应在有真正的“单一实例”的需求时才可使用。
二、选择。
1、设计模式一般用来解决什么样的问题A.同一问题的不同表相B不同问题的同一表相C.不同问题的不同表相D.以上都不是2、Wright是一种A、计算机编程语言B、统一建模语言C、设计模式描述语言D、软件体系结构描述语言3. 下面的类图表示的是哪个设计模式?。
A抽象工厂模式B观察者模式C 组合模式D迭代器模式4、下面的类图表示的是哪个模式?A、抽象工厂模式(Abstract Factory)B、工厂方法模式(Factory Method)C、组合模式(Composite)D、责任链模式(Chain of Responsibility)5、单件模式中,两个基本要点、和单子类自己提供单例A .构造函数私有 B.唯一实例C.静态工厂方法D.以上都不对6.以下意图那个是用来描述SINGLETON(单件)?A.将一个类的接口转换成客户希望的另外一个接口。
该模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作B.保证一个类仅有一个实例,并提供一个访问它的全局访问点。
C.定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。
第一章单件流程生产方式一:定义:单件流程是指产品以顾客需要的速率,匀速直线,通过整个生产流程的状态。
强调成品是从原材料一个一个的连续制造出来,而非批量生产在制品(半成品),从而减少半成品的库存,避免因堆积和库存而把产生的问题和缺陷掩盖起来。
二:单件流程的作用。
1缩短制程时间,加快交货周期。
2缩短库存周期,减少资金积压。
3快速发现异常,避免批量返工,减少返工损失。
4保证单件品质,每一个作业者都是检验员,每件产品都由下一个工序验证,减少客户投诉。
5降低成本,用于管理半成品、仓储、搬运的人员,空间,时间,得以减少。
6改进生产力,许多伴随批量生产而来的不增值作业随即消除。
7释放作业空间,消除了在制品,存储空间得以释放。
流动要求作业流程必须互相衔接。
8简化材料补给,一次搬运完成从仓库原材料到成品的实现。
9增强灵活性,缩短了成品的制程周期,创造更多时间安排订单,计划随时调整,适应顾客需求。
10提高可测量性,一件一件测试成品,品质更能保证。
11有效提高生产力,人员熟练,动作越来越快。
12改善生产安全性,减少了搬运也就减少了事故。
13提升员工士气,因为工作单一化,从而使员工更快适应原本复杂的岗位与工艺。
14生产环境得以保障。
三:单件流程可以达到的目标。
1降低成本。
2效率提高。
3浪费减少。
4品质保证。
5纳期准确。
6士气提升。
四:单件流程的特点。
1改善效果快,能够发现问题,控制品质异常。
2减少浮点,提高效能,工序与工序之间衔接精密,缩短传送时间,取送距离。
3暴露问题彻底,利于消除工业生产中的“八大浪费”。
五:单件流程的基本要求。
1物料及时供给。
2流程布局合理。
3设备,治工具,状态良好。
4故障及时处理。
5工序平衡,工艺先进。
6计划明确。
7订单稳定。
8人员稳定。
六:单件流程的局限性。
一处异常,整个流程都会受到影响。
七:单件流程最终达到的效果。
1按时完成当天的生产计划。
2本工序刚加工完成的产品,正是下工序所必须的。
3每一个工序完成的产品都是合格品,将不良降到最低。
factory模式课程设计一、课程目标知识目标:1. 学生能理解工厂模式的基本概念,掌握其在软件开发中的应用。
2. 学生能够描述工厂模式的组成部分,如抽象工厂、具体工厂、抽象产品和具体产品。
3. 学生能够掌握工厂模式的优点,如降低对象间的耦合度,提高代码的可维护性和可扩展性。
技能目标:1. 学生能够运用所学知识,使用工厂模式编写简单的程序实例。
2. 学生能够通过实际案例分析,学会如何将工厂模式应用于实际软件开发中,提高问题解决能力。
情感态度价值观目标:1. 学生通过学习工厂模式,培养对软件工程和设计模式的兴趣,提高对编程的热爱。
2. 学生能够认识到团队合作的重要性,学会与同学共同分析问题、解决问题。
3. 学生能够通过工厂模式的学习,培养良好的编程习惯,提高对代码质量的要求。
分析课程性质、学生特点和教学要求,本课程目标旨在让学生在掌握工厂模式基本知识的基础上,通过实际操作和案例分析,提高编程能力和解决问题的能力。
课程目标具体、可衡量,便于教师进行教学设计和评估,同时激发学生的学习兴趣,培养良好的情感态度价值观。
二、教学内容本课程教学内容紧密围绕课程目标,结合课本第二章“设计模式”相关内容,具体包括以下部分:1. 工厂模式基本概念:介绍工厂模式的定义、作用及其在软件开发中的应用场景。
2. 工厂模式组成部分:讲解抽象工厂、具体工厂、抽象产品和具体产品的概念及关系。
3. 工厂模式分类:介绍简单工厂模式、工厂方法模式和抽象工厂模式三种类型,分析各自的特点和适用场景。
4. 工厂模式优点:阐述工厂模式在降低耦合度、提高代码可维护性和可扩展性等方面的优势。
5. 实例分析:结合实际案例,讲解工厂模式在软件开发中的应用,使学生更好地理解工厂模式的工作原理。
6. 编程实践:引导学生运用所学知识,动手编写工厂模式的实例程序,巩固理论知识。
教学内容安排和进度如下:1. 第1课时:工厂模式基本概念、分类及优点。
2. 第2课时:工厂模式组成部分及实例分析。
设计模式目 录一、 行为模式 (2)1、 命令模式 (2)2、 观察者模式 (2)3、 策略模式 (3)4、 责任链模式 (4)5、 迭代器模式 (5)6、 中介者模式 (5)7、 状态模式 (6)8、 模板方法模式 (7)9、 访问者模式 (7)10、 备忘录模式 (8)11、 解释器模式 (9)二、 结构型模式 (9)12、 适配器模式 (9)13、 桥接模式 (10)14、 组合模式 (11)15、 装饰模式 (11)16、 外观模式 (12)17、 代理模式 (12)18、 享元模式 (13)三、 创建型模式 (14)19、 工厂方法模式 (14)20、 抽象工厂模式 (14)21、 建造者模式 (15)22、 原型模式 (16)23、 单件模式 (17)一、 行为模式1、命令模式将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。
自己的理解:将命令的发起者与命令的执行者分离,实现他们之间的松耦合关系。
这样可以方便地添加和实现各种不同命令。
参与者:mand声明执行操作的接口。
2.ConcreteCommand将一个接收者对象绑定于一个动作。
调用接收者相应的操作,以实现Execute。
3.Invoker要求该命令执行这个请求。
4.Receiver知道如何实现与执行一个请求相关的操作。
任何类都可能作为一个接收者。
2、观察者模式定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
自己的理解:当一个主题发生变化后,多个观察者需要作出反应时,可以将这些观察者在其观察的主题处进行注册。
当该主题变化后,就通知所有在它这里注册的观察者。
主题的更新与观察者的反应分离,这样实现主题和观察者之间的松耦合关系。
参与者:1.Subject(目标)目标知道它的观察者。
可以有任意多个观察者观察同一个目标。
工厂模式和单件模式1.1 Factory模式(一)应用背景我们经常抽象出一些类的公共接口以形成抽象基类或者接口,这样就可以通过声明一个指向基类的指针来指向实际的子类实现,达到了多态的目的。
(二)存在问题N多的子类继承抽象基类,不得不在每次要用到子类的地方就编写诸如new XXX 的代码,此外必须知道实际子类的名字,在复杂系统中简直不可能,维护和扩展也很困难。
另外,在父类中并不知道具体要实例化哪一个具体的子类。
(三)程序举例#ifndef _PRODUCT_H#define _PRODUCT_H/************************************************************************/ /* Product */ /************************************************************************/ class Product{public:Product();virtual ~Product();virtual void operation();};/************************************************************************/ /* Concrete Product A *//************************************************************************/ class ConcreteProductA : public Product{public:ConcreteProductA();virtual ~ConcreteProductA();virtual void operation();};/************************************************************************/ /* Concrete Product B *//************************************************************************/ class ConcreteProductB : public Product{public:ConcreteProductB();virtual ~ConcreteProductB();virtual void operation();};/************************************************************************/ /* Concrete Product C *//************************************************************************/ class ConcreteProductC : public Product{public:ConcreteProductC();virtual ~ConcreteProductC();virtual void operation();};#endif#include "product.h"#include "stdio.h"/************************************************************************/ /* Product */ /************************************************************************/ Product::Product(){}Product::~Product(){}void Product::operation(){printf("Product operation...\n");}/************************************************************************/ /* Concrete Product A *//************************************************************************/ ConcreteProductA::ConcreteProductA(){}ConcreteProductA::~ConcreteProductA(){}void ConcreteProductA::operation(){printf("ConcreteProductA operation...\n");}/************************************************************************/ /* Concrete Product B *//************************************************************************/ ConcreteProductB::ConcreteProductB(){}ConcreteProductB::~ConcreteProductB(){}void ConcreteProductB::operation(){printf("ConcreteProductB operation...\n");}/************************************************************************/ /* Concrete Product C *//************************************************************************/ ConcreteProductC::ConcreteProductC(){}ConcreteProductC::~ConcreteProductC(){}void ConcreteProductC::operation(){printf("ConcreteProductC operation...\n");}#include "product.h"#include "stdio.h"void main(){Product *pProduct = NULL;pProduct = new ConcreteProductA();pProduct->operation();pProduct = new ConcreteProductB();pProduct->operation();pProduct = new ConcreteProductC();pProduct->operation();printf("\n");}程序结果:(四)工厂模式。