UML---工厂模式

简单工厂、工厂方法、抽象工厂三种模式总是不能正确区分,以下是自己浅薄的理解。并附上一个还不错的详解博客

简单工厂:一个工厂一条产品线生产所有产品,如果想要新的产品,则要修改产品线。
工厂方法:一个工厂,多条产品线。如果想要新产品,则增加产品线
抽象工厂:一个工厂,多条产品线,每条产品线可以生成多个不同种类的产品

.

 

简单工厂模式:

看一个披萨的项目:要便于披萨种类的扩展,要便于维护
1)披萨的种类很多(比如 GreekPizz、 Cheese pizz等)
2)披萨的制作有 prepare,bake, cut, box
3)完成披萨店订购功能。

 

增加一个PepperPizza时,所有的店面进行的OrderPizza操作都要进行修改,这是不理想的情况。

优缺点分析 :
1、优点:比较好理解,简单易操作
2、缺点:违反了设计模式的 ocp原则(对扩展开放,对修改关闭)。即:当我们给类增加新功能的时候,尽量不修改代码,或者少修改代码。
3、如果新增一个 Pizza 种类,则订购 Pizza 的代码都要修改。(下面的代码是传统方法)


4、改进的思路分析:
分析:如果在多处 都有创建 Pizza 实例的代码,要修改多处。
思路:如果把创建 Pizza 对象 封装到一个 类种,这样的话,增加新的 Pizza 种类时,只需要修改该类 即可。其它有创建 Pizza 对象的代码 就不需要修改了。------》简单工厂模式

orderPizza会传入一个SimpleFactory类型的对象,
该简单工厂对象会根据用户输入的披萨种类调用creatpizza方法,生产一个“某种种类”的pizza饼,返回给orderpizza
orderpizza会将pizza饼进行prepare、bake、cut、box操作。

 

如果新加入一种种类的Pizza、一个新的店面,只需要修改SimpleFactory中的代码即可:

在上述代码的结尾加上“ChinaPizza”即可。

 

工厂方法模式
新需求:客户在点 披萨时,点不同口味的 Pizza ,比如 北京的奶酪披萨、北京的芝士披萨、洛杉矶的胡椒披萨
思路1:使用 简单工厂模式,创建不同的简单工厂类,比如 BJPizzaSimpleFactory 、LSJPizzaSimpleFactory 等等。这种方法满足了当前的需求,但考虑到项目的规模,软件的可维护性、可扩展性 并不好。
思路2:工厂方法模式

工厂方法模式介绍
1、工厂方法模式设计方案:将披萨项目的实例化功能抽象成抽象方法,在不同的口味点
餐子类中具体实现。
2、工厂方法模式:定义了一个创建对象的抽象方法,由子类决定要实例化的类。工厂方
法模式将对象的实例化推迟到子类。

应用案例
1、披萨项目新的需求:客户在点披萨时,可以点不同口味的披萨,比如 北京的奶酪
pizza、北京的胡椒pizza 或者是伦敦的奶酪pizza、伦敦的胡椒pizza

2、思路分析图解

 

 

抽象工厂模式

基本介绍

1)抽象工厂模式:定义了一个interface用于创建相关或有依赖关系的对象簇,而无需指明具体的类

2)抽象工厂模式可以将简单工厂模式和工厂方法模式进行整合

3)从设计层面看,抽象工厂模式就是对简单工厂模式的改进(或者称为进一步的抽象

4)将工厂抽象成两层: AbsFactory(抽象工厂)和具体实现的工厂子类
程序员可以根据创建对象类型使用对应的工厂子类。这样将单个的简单工厂类变成了工厂簇更利于代码的维护和扩展。

5)类图

 

 

 

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值