三种工厂模式的实例化应用

1.实验目的

a.熟悉建模工具。                                         

b. 掌握简单工厂模式、工厂方法模式、抽象工厂模式,并进行设计应用。

2.题目描述

1.简单工厂模式

使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数M,则返回一个Man对象,如果传入参数W,则返回一个Woman对象,请实现该场景。现需要增加一个新的Robot类,如果传入参数R,则返回一个Robot对象,对代码进行修改并注意女娲的变化。

2.工厂方法模式

海尔工厂(Haier)生产海尔空调(HaierAirCondition),美的工厂(Midea)生产美的空调(MideaAirCondition) 。使用工厂方法模式描述该场景,绘制类图并编程实现。

3.抽象工程模式

电脑配件生产工厂生产内存、CPU等硬件设备,这些内存、CPU的品牌、型号并不一定相同,根据下面的“产品等级结构-产品族”示意图,使用抽象工厂模式实现电脑配件生产过程并绘制相应的类图,绘制类图并编程实现。

3.需求分析

完成实验报告包含以下内容:

1.题目分析

2.类图设计

使用UML的类图结构设计。

3.程序实现

程序源代码(请写入必要的注释),优化功能请在注释中进行说明。

4.调试、测试及运行结果

5.经验归纳

4.算法设计

4.1简单工厂模式

实例化对象的时候不再使用 new Object()形式,可以根据用户的选择条件来实例化相关的类。

对于客户端来说,去除了具体的类的依赖。只需要给出具体实例的描述给工厂,工厂就会自动返回具体的实例对象。

4.1.1算法分析

(1).定义男人类、女人类、机器人类继承人类;

(2).定义女娲类,实现造人过程;

(3).显示类(main类)对传入参数进行判断;

(4).W-生成女人、M-生成男人、R-生成机器人、0-退出。

4.1.2UML类图设计

4.2工厂方法模式

工厂方法模式是对简单工厂模式进一步的解耦,因为在工厂方法模式中是一个子类对应一个工厂类,而这些工厂类都实现于一个抽象接口。这相当于是把原本会因为业务代码而庞大的简单工厂类,拆分成了一个个的工厂类,这样代码就不会都耦合在同一个类里了。

4.2.1算法分析

(1).定义两个接口类AIR、AIRFactory;

(2).定义HaierAIR类、MideaAIR类实现AIR接口;

(3).定义HaierAIRFactory类、MideaAIRFactory类实现AIRFactory接口;

(4).定义Test类(main类)。

 

4.2.2 UML类图设计

 

4.3抽象工厂模式

抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。

4.3.1算法分析

(1).定义三个接口类ComputerAccessoriesFactory、CPU、RAM;

(2).定义PcCPU类、MacCPU类实现CPU接口;

(3).定义PcRAM类、MacRAM类实现RAM接口;

(4).定义PcFactory类、MacFactory类实现ComputerAccessoriesFactory接口;

(5).定义Test类(main类)。

 

 

4.3.2算法实现

 

5.调试及测试  

5.1调试界面

5.1.1简单工厂模式

5.1.2工厂方法模式

 

 

5.1.3抽象工厂模式

 

5.2运行截图

5.2.1简单工厂模式

 

 

  

  

 

 

 

5.2.2工厂方法模式

5.2.3抽象工厂模式

 

 

6.经验归纳

6.1前言:

所谓简单工厂,工厂,抽象工厂。当我一开始看到并学习这个这三个概念的时候就感觉这三个感念很相似,有点混乱,事实证明,确实让我变得很混乱。即使当初学的时候勉强看懂,但是事后便抛诸脑后,统统忘记到九霄云外了。因此当我回过头从新理解概念时,总结了以下心得,加深理解。

 

工厂类模式设计的核心是:让“生产”和“产品”解耦。

6.2简单公厂

所谓的简单工厂,我的理解是不用管是什么产品,我们将所有产品的生产线一股脑的都放在一个工厂里,这样工厂便可以根据用户的要求来生产各种产品。

根据前文“女娲造人”实例我们可以看出简单工厂模式的缺陷就是:由于一个工厂里生产所有的商品,当出现新的产品时,我们需要扩展改造工厂以适应新产品的生产,这样使得“生产”和“产品”并没有解耦,并且会导致工厂无限制的扩大,难以检查维护。

6.3工厂

基于简单工厂的缺陷,我们使用工厂模式,工厂模式就是一个工厂只生产一样产品,当需要新产品时,我们只用设计新产品和建设新工厂就行了。这样的方式使得原来的产品生产线不受新产品的影响实现了解耦。

6.4抽象工厂

抽象工厂是基于工厂模式的,由上面“美的、海尔”实例可知,工厂类只有单一的抽象产品,但是如果一个工厂可以产生多个产品,而每个产品又可以被多个工厂生产时,这时工厂模式便不能满足我们的设计需求了。因此,我们引出抽象工厂。

举个例子:比如三星是一个品牌,三星生产洗衣机,电视,冰箱;格力也是一个品牌,格力也生产洗衣机,电视,冰箱。那么,三星工厂和格力工厂生产的2个品牌的洗衣机,同时洗衣机这种产品还可以被LG,海尔,三菱等等不同的品牌的工厂生产。那么三星生产的三星洗衣机,三星电视机,三星冰箱就是三星这个工厂所能生产的产品。可能还会有西门子工厂产品,格力工厂产品,美的工厂产品等等。

6.5结论

我们可以得出结论:

1.工厂模式中,一个工厂生产一个产品,所有产品派生于同一个抽象产品(或产品接口)。

2.抽象工厂中,每个工厂都可以生产多个产品,它们是一个品牌。而不同的产品继承自不同的抽象产品接口。

——————————————————————————————————————————金主爸爸(禁止转载) 哼!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值