抽象工厂模式(abstract factory pattern) 详解

抽象工厂模式: 提供一个接口, 用于创建相关或依赖对象的家族, 而不需要明确指定具体类.

全部代码: http://download.csdn.net/detail/u012515223/7403553

具体方法:

1. 提供一个抽象工厂(abstract factory)接口(interface)类, 不同的具体工厂(concrete factory)继承此类.

代码:

/**
 * @time 2014年5月26日
 */
package factory;  

/**
 * @author C.L.Wang
 *
 */
public interface PizzaIngredientFactory {
    public Dough createDough();
    public Sauce createSauce();
    public Cheese createCheese();
    public Veggies[] createVeggies();
    public Pepperoni createPepperoni();
    public Clams createClam();
}

2. 具体工厂(concrete factory), 实现抽象工厂(abstract factory)接口(interface).

代码:

/**
 * @time 2014年5月26日
 */
package factory;  

/**
 * @author C.L.Wang
 *
 */
public class NYPizzaIngredientFactory implements PizzaIngredientFactory {  

    /* (non-Javadoc)
     * @see factory.PizzaIngredientFactory#createDough()
     */
    @Override
    public Dough createDough() {
        // TODO Auto-generated method stub
        return new ThinCrustDough();
    }  

    /* (non-Javadoc)
     * @see factory.PizzaIngredientFactory#createSauce()
     */
    @Override
    public Sauce createSauce() {
        // TODO Auto-generated method stub
        return new MarinaraSauce();
    }  

    /* (non-Javadoc)
     * @see factory.PizzaIngredientFactory#createCheese()
     */
    @Override
    public Cheese createCheese() {
        // TODO Auto-generated method stub
        return new ReggianoCheese();
    }  

    /* (non-Javadoc)
     * @see factory.PizzaIngredientFactory#createVeggies()
     */
    @Override
    public Veggies[] createVeggies() {
        // TODO Auto-generated method stub
        Veggies veggies[] = {new Garlic(), new Onion(), new Mushroom(), new RedPepper()};
        return veggies;
    }  

    /* (non-Javadoc)
     * @see factory.PizzaIngredientFactory#createPepperoni()
     */
    @Override
    public Pepperoni createPepperoni() {
        // TODO Auto-generated method stub
        return new SlicedPepperoni();
    }  

    /* (non-Javadoc)
     * @see factory.PizzaIngredientFactory#createClam()
     */
    @Override
    public Clams createClam() {
        // TODO Auto-generated method stub
        return new FreshClams();
    }  

}  

/**
 * @time 2014年5月26日
 */
package factory;  

/**
 * @author C.L.Wang
 *
 */
public class ChicagoPizzaIngredientFactory implements PizzaIngredientFactory {  

    /* (non-Javadoc)
     * @see factory.PizzaIngredientFactory#createDough()
     */
    @Override
    public Dough createDough() {
        // TODO Auto-generated method stub
        return new ThickCrustDough();
    }  

    /* (non-Javadoc)
     * @see factory.PizzaIngredientFactory#createSauce()
     */
    @Override
    public Sauce createSauce() {
        // TODO Auto-generated method stub
        return new PlumTomatoSauce();
    }  

    /* (non-Javadoc)
     * @see factory.PizzaIngredientFactory#createCheese()
     */
    @Override
    public Cheese createCheese() {
        // TODO Auto-generated method stub
        return new MozzarellaCheese();
    }  

    /* (non-Javadoc)
     * @see factory.PizzaIngredientFactory#createVeggies()
     */
    @Override
    public Veggies[] createVeggies() {
        // TODO Auto-generated method stub
        Veggies veggies[] = {new BlackOlives(), new Spinach(), new Eggplant()};
        return veggies;
    }  

    /* (non-Javadoc)
     * @see factory.PizzaIngredientFactory#createPepperoni()
     */
    @Override
    public Pepperoni createPepperoni() {
        // TODO Auto-generated method stub
        return new SlicedPepperoni();
    }  

    /* (non-Javadoc)
     * @see factory.PizzaIngredientFactory#createClam()
     */
    @Override
    public Clams createClam() {
        // TODO Auto-generated method stub
        return new FrozenClams();
    }  

}

3. 产品抽象(abstract)父类, 提供接口, 供具体产品(concrete product)调用.

代码:

/**
 * @time 2014年5月26日
 */
package factory;  

/**
 * @author C.L.Wang
 *
 */
public abstract class Pizza {
    String name;
    Dough dough; //生面团
    Sauce sauce; //调味汁
    Veggies veggies[];
    Cheese cheese;
    Pepperoni pepperoni;
    Clams clam;  

    abstract void prepare();  

    void bake() {
        System.out.println("Bake for 25 minutes at 350");
    }  

    void cut() {
        System.out.println("Cutting the pizza into diagonal slices");
    }  

    void box() {
        System.out.println("Place pizza in official PizzaStore box");
    }  

    void setName(String name) {
        this.name = name;
    }  

    public String getName() {
        return name;
    }
}

4. 具体产品(concrete product)继承产品抽象(abstract)父类, 使用工厂类实现继承接口, 通过不同的工厂生产不同的产品;

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索setup factory
, new
, return
, javadoc
, override
, public
, non monotonous
, non parseable
, method
, Factory
Factory模式
abstract抽象类、abstract factory、abstract factory模式、factory pattern、logback pattern 详解,以便于您获取更多的相关知识。

时间: 2025-01-21 04:09:29

抽象工厂模式(abstract factory pattern) 详解的相关文章

乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)

原文:乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)[索引页][源码下载] 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern) 作者:webabcd 介绍 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 示例 有Message和MessageModel,Message有一个Insert()方法,该方法的参数是MessageModel. AbstractMessageModel usi

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

版权声明:尊重博主原创文章,转载请注明出处哦~http://blog.csdn.net/eson_15/article/details/51253161 目录(?)[+] 1. 女娲的失误         上一节学习了工厂模式,女娲运用了该模式成功创建了三个人种,可是问题来了,她发现没有性别--这失误也忒大了点吧--竟然没有性别,那岂不是--无奈,只好抹掉重来了,于是所有人都被消灭掉了,重新造人.         女娲开始分析了,既然要区别男女,那么生产人种的工厂(八卦炉)要重新改造了,因为一个

设计模式:工厂方法模式(Factory Method)和抽象工厂模式(Abstact Factory)

 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象. 在这些情况,新对象的建立就是一个 "过程",不仅是一个操作,像一部大机器中的一个齿轮传动. 分类  工厂模式主要是为创建对象提供过渡接口,以便将创建对象的

java 桥模式(Bridge Pattern)详解_java

java 桥模式(Bridge Pattern) Bridge模式解耦,其实施的定义.它是一种结构模式.本模式涉及充当桥的接口.这座桥使具体的类独立的接口实施者类.  Bridge模式解耦,其实施的定义.它是一种结构模式. 本模式涉及充当桥的接口.这座桥使具体的类独立的接口实施者类. 这两种类型的类可以在不影响彼此被改变. 实例: interface Printer { public void print(int radius, int x, int y); }//from www.j a v

工厂模式(factory pattern) 详解

工厂方法模式: 定义了一个创建对象的接口, 但由子类决定要实例化的类是哪一个. 工厂方法让类把实例化推迟到子类. 包括: 创建者父类(creator), 包含创建对象的方法(代替new具体的对象, 通过参数创建不同的对象), 和一些基本的方法; 具体创建者(concrete creator), 继承创建者父类, 实现创建对象的方法, 不同参数可以创建不同的对象; 产品类父类(product), 包含产品的基本使用方法, 被创建者父类(creator)的基本方法使用; 具体产品(concrete

.Net设计模式之简单工厂模式(Simple Factory Pattern)

一.简单工厂模式简介(Bref Introduction) 简单工厂模式(Simple Factory Pattern)的优点是,工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖 二.解决的问题(What To Solve) 客户实例化对象时不需要关心该对象是由哪个子类实例化的. 三.简单工厂模式分析(Analysis) 1.简单工厂模式结构 IProduct接口:抽象产品类 ConcreteProduct类:产品类的具体实现 Simp

《设计模式》学习笔记4——抽象工厂模式

定义 在进行工厂方法模式学习的时候,发现工厂方法模式有一个明显的缺陷,即每增加一个具体的产品都需要至少增加两个类,一个产品类,一个对应的工厂类. 这种情况在产品特别多的情况下,显然就更有问题,然后便有了抽象工厂模式,来解决这个问题. 抽象工厂模式引用书中的定义如下: 抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类.抽象工厂模式又称为Kit模式,它是一种对象创建型模式 理解 抽象工厂模式相对于前两个工厂模式都要难

解读设计模式----抽象工厂模式(AbstractFactory Pattern)

一.模式描述 我的程序中有需要一系列的对象,比如我们要吃一碗米饭(Rice),要喝一杯咖啡(Coffee)......,要想利用他们,我们就必须在程序中根据用户要求,然后一个个调用 new 操作符来生成他们,这样客户程序就要知道相应的类的信息,生成的代码显然不够灵活.那么我们可以在代码中不利用具体的类,而只是说明我们需要什么,然后就能够得到我们想要的对象呢? 这当然是可以的,根据GOF在<设计模式>一书里介绍,要创建对象这样的工作应该是属于创建型模式完成的.熟悉各种设计模式意图的朋友就会很快得

跟屌丝大哥学习设计模式-抽象工厂模式

1.3 抽象工厂(Abstract Factory)模式    抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品具体类型的情况下,创建多个产品族中的产品对象.这就是抽象工厂模式的用意.     每个模式都是针对一定问题的解决方案.抽象工厂模式面对的问题是多产品等级结构的系统设计.     在学习抽象工厂具体实例之前,应该明白两个重要的概念:产品族和产品等级.     产品族:是指位于不同产品等级结构中,功能相关联的产品组成的家族.比如AMD的CPU和ADM芯片的主板,组成一个家族.