设计模式总纲——抽象工厂模式

  话说,上次小陈自从把生产线从小作坊换成中大型工厂之后,业绩是一日千里,小陈更是财源滚滚,订单是一件接着一件,正直NBA火热,特别是NBA系列的产品卖得相当火热,这时有件事情让小陈犯难了,因为在这边,小陈目前的生产线只是进行单一的进行生产,队徽工厂生产着队徽,球衣工厂生产的球衣,球鞋工厂生产着球鞋,而小陈在业绩提高的同时,他对业绩进行了大数据分析,他发现了,购买了骑士队队徽的人有99.99999%的人会购买骑士队服,和印有骑士队标的球鞋,同理购买了雷霆队徽的人也会购买雷霆队的队服和雷霆队的篮球。

  这让小陈头疼的是,因为工厂生产的产品单一并且分散,每次进行发货的时候,都要等待他们从不同的地方运到店里,然后由店员进行组装,这样,不仅耗时,而且小陈的人力成本也蹭蹭蹭的往上涨,这不,小陈的员工又开始向小陈抱怨了,“陈总,你看我们每天都要组装将近1万套的产品,员工已经都累得要死要活了,很多人都打算辞职不干了,你赶紧给想想办法吧。”,小陈这时候急的焦头烂额,赶忙给一线人员升值加薪,才暂时安抚住了他们的情绪。

  这时候,小陈也联系了工厂的主管,向他述说了目前的苦衷,询问有没有更好的办法。这时他们的主管向小陈说:“你这种问题以前我们早就遇到了,我们肯定已经早已做好了预案了,像我们公司总部那边对于一系列的套装产品的话,比如像,一个产品族的产品都迁移到同一个工厂生产,并进行组装,类似球鞋,球衣,篮球就属于一类产品,不同的产品族对应着不同的工厂,来,我来给你看一下,我们工厂中,对于产品族工厂的架构图。”然后工厂的主管就给小陈传了一张产品族生产工厂的架构图。

“你看,如果要生产一系列的产品族产品的话,只需要把产品生产线放在一起就可以了。”,现在我们来看看具体的产品线的模板代码:比如我们这次要来生产一套骑士队的产品和雷霆队的产品,产品暂时就包含了队徽和球鞋

1、一个抽象接口,专门用来生产队徽和球鞋的,但是具体的实现交给下面的子工厂。

1 public interface AbstractFactory {
2     public AbstractProduct createBadge();
3
4     public AbstractProduct createShoes();
5 }

2、产品生产的图纸,这里只包含的具体产品的信息,如果需要有特定的方法,则自行进行添加。

1 public interface AbstractProduct {
2     public void productInfo();
3 }

3、克利夫兰和雷霆的产品工厂,专门生产克利夫兰骑士队的队徽和球鞋和雷霆队的队徽和球鞋

 1 public class CavalierProductFactory implements AbstractFactory{
 2     @Override
 3     public AbstractProduct createBadge() {
 4         return new CavalierBadge();
 5     }
 6
 7     @Override
 8     public AbstractProduct createShoes() {
 9         return new CavalierShones();
10     }
11 }
 1 public class ThunderProductFactory implements AbstractFactory{
 2
 3     @Override
 4     public AbstractProduct createBadge() {
 5         return new ThunderBadge();
 6     }
 7
 8     @Override
 9     public AbstractProduct createShoes() {
10         return new ThunderShoes();
11     }
12 }

而上面的队徽和球鞋则实现自AbstractProduct接口,取其中一例即可。

1 public class CavalierBadge implements AbstractProduct{
2     @Override
3     public void productInfo() {
4         System.out.println("This is a Cavalier Badge!");
5     }
6 }

现在两个工厂就可以开始各司其职的实现他们对应的产品了,像上篇文章所述,我们可以把对应的工厂写到具体的配置文件中,然后根据反射来进行实现具体的工厂。

 1     @Test
 2     public void client() {
 3         CavalierProductFactory cavalierFactory = (CavalierProductFactory)XMLUtils.getFactory("CavalierProductFactory");
 4         ThunderProductFactory thunderFactory = (ThunderProductFactory)XMLUtils.getFactory("ThunderProductFactory");
 5
 6         AbstractProduct cavalierBadge = cavalierFactory.createBadge();
 7         AbstractProduct cavalierShoes = cavalierFactory.createShoes();
 8
 9         AbstractProduct thunderBadge = thunderFactory.createBadge();
10         AbstractProduct thunderShoes = thunderFactory.createShoes();
11     }

这样的话我们就可以生产对一一对应的产品族了。

小陈看了一下,很开心,这样的话就可以节省很多自己的人力成本了。产品又都分成了一类,但是小陈转念一想,如果单单生产不同球队的产品就需要一个工厂的话,那样的话成本太大了,每次都要新建一个工厂,主管默默的点了点头,说道:

“当然了,如果更细分的话,其实骑士队的队徽和球鞋和雷霆的队徽和球鞋是属于同一个大类,这样的话,我们可以再在工厂内部加分支来进行选择,那样的话,只需要使用一个工厂的产品就可以了,这样的话,我们的生产线就不规范了,就会变成小作坊的工作模式了,但是有时候我们也会为了成本,不产生太多不必要的工厂来进行这种工作模式,所以说,看看究竟是为了扩展性来拓展产品好,还是为了减少成本(类的膨胀),不过有时候在我们开始建造工厂的时候都会先考虑生产的规模(工程规模)来择优,或者居中选择。”

小陈听了,陷入了沉思,看来企业要做大做强也不容易啊,考虑的东西要到方方面面啊,不过现在既然我每天的产品已经达到了 十万/天 的销量的话,那我先抓紧铺货了,就先拓展些工厂,增加产品,开始开搞了。小陈在自己的商业之路又迈出了坚实的一步,往后小陈又会在商业之路上遇到什么波折呢?

  欲知后事如何,且听下文分解。

时间: 2024-11-05 14:52:39

设计模式总纲——抽象工厂模式的相关文章

设计模式之抽象工厂模式

抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 最大的好处便是易于交换产品系列,由于具体工厂类,在一个应用中只需在初始化的时候出现一次,这就使得改变一个应用的具体工厂变得非常容易,它只需改变具体工厂即可使用不同的产品配置. 他使具体创建实例的过程与客户端分离,客户端是通过它们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离. 下面的代码还使用了反射与XML. 代码如下: using System; using System.Collections.Ge

设计模式之抽象工厂模式20170803

创建型设计模式之抽象工厂模式: 一.含义 为创建一组相关或相互依赖的对象提供一个接口,而且无需指定它们的具体类. 具体来说, 为一组具有相同约束(属性)的对象,提供一个接口,这个接口下有不同的实现,每个实现类对应一种类型的约束(一种具体的属性),同时提供该类型的约束(属性)下所有对象的创建方法 二.代码说明 1.主要有两个角色 1)一组互相影响的产品线(对象),也叫做产品族 2)抽象工厂类及其实现类 抽象工厂类:在N个产品族中,在抽象工厂类中就应该有N个创建方法 实现类:具体实现类是产品族的具体

大话设计模式_抽象工厂模式(Java代码)

抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类. 简单描述:有多种抽象产品,并且每种抽象产品都有多个具体产品.一个抽象工厂,提供多个具体工厂,每个工厂则提供不同种类的具体产品. 大话设计模式中的截图: 例子代码: AbstractProductA类: 1 package com.longsheng.abstractfactory; 2 3 public abstract class AbstractProductA { 4 5 public abstract v

设计模式三—抽象工厂模式

设计模式三-抽象工厂模式 一.定义 抽象工厂模式是工厂方法模式的进一步抽象.如果产品簇中只有一种产品,则退化为工厂方法模式. 二.原理图 三.代码实例 * 苹果和土豆是园丁1的杰作 * 葡萄和西红柿是园丁2的杰作 1.Fruit.java public interface Fruit { /* * 生长 * 收获 * 栽种 */ public void grow(); public void harvest(); public void plant(); } 2.Apple.java publi

设计模式之抽象工厂模式(Abstract Factory)

1.定义 抽象工厂模式为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类. 2.类图 由于类太多就不上源码了~ 最佳实践: 在一个应用中,需要在三个不同平台(Windows.Linux.Android)上运行,通过抽象工厂模式屏蔽掉操作系统对应的影响三个不同操作系统上的软件功能.应用逻辑.UI都应该是非常类似的,唯一不同的是调用不同的工厂方法,由不同的产品类去处理与操作系统交互的信息. 设计模式之抽象工厂模式(Abstract Factory)

C#设计模式之三抽象工厂模式(AbstractFactory)【创建型】

原文:C#设计模式之三抽象工厂模式(AbstractFactory)[创建型] 一.引言 写了3篇有关设计模式的文章了,大家有了些反馈,说能从中学到一些东西,我感到很欣慰,那就继续努力.今天我要写第四个模式了,该模式叫抽象工厂.上一篇文章我们讲了[工厂方法]模式,它是为了解决[简单工厂]模式所面对的问题,它的问题就是:如果我们增加新的产品,工厂类的方法就要修改本身的代码,增加产品越多,其逻辑越复杂,同时这样的修改也是不符合[开放关闭原则OCP],对修改代码关闭,对增加代码开放.为了解决[简单工厂

设计模式——4.抽象工厂模式

1. 模式动机 在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂中只有一个工厂方法或者一组重载的工厂方法.但是有时候我们需要一个工厂可以提供多个产品对象,而不是单一的产品对象. 为了更清晰地理解工厂方法模式,需要先引入两个概念: 产品等级结构 :产品等级结构即产品的继承结构,如一个抽象类是电视机,其子类有海尔电视机.海信电视机.TCL电视机,则抽象电视机与具体品牌的电视机之间构成了一个产品等级结构,抽象电视机是父类,而具体

设计模式之抽象工厂模式(c++)

问题描述 假设我们要开发一款游戏, 当然为了吸引更多的人玩, 游戏难度不能太大(让大家都没有信心了,估计游戏也就没有前途了),但是也不能太简单(没有挑战性也不符合玩家的心理).于是我们就可以采用这样一种处理策略: 为游戏设立等级,初级.中级.高级甚至有BT 级. 假设也是过关的游戏, 每个关卡都有一些怪物( monster) 守着, 玩家要把这些怪物干掉才可以过关. 作为开发者, 我们就不得不创建怪物的类, 然后初级怪物. 中级怪物等都继承自怪物类(当然不同种类的则需要另创建类,但是模式相同).

【设计模式】抽象工厂模式

抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类.每个生成的工厂都能按照工厂模式提供对象. 介绍 意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 主要解决:主要解决接口选择的问题. 何时使用:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品