什么情况下使用抽象工厂模式?
a).一个系统不应该依赖于产品类的实例如何被创建、组合和表达的细节,这对于所有形态的工厂模式都是重要的;
b).这个系统的产品有多于一个产品族,而系统只消费其中某一族的产品;(这是抽象工厂模式的原始用意,某一族的产品就类似于下面例子中,
北方的产品属于一个产品族,热带的产品属于一个产品族)
c).系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于实现;
水果接口
package com.wlh.AbstractFactory;
/**
* 水果
* @author Administrator
*
*/
public interface Fruit {
}
蔬菜接口
package com.wlh.AbstractFactory;
/**
* 蔬菜
* @author Administrator
*
*/
public interface Viggie {
}
园丁接口(也就是工厂)
package com.wlh.AbstractFactory;
/**
*园丁(也就是工厂)
*/
public interface Gardener {
public Fruit createFruit();
public Viggie createViggie();
}
北方水果
package com.wlh.AbstractFactory.impl;
import com.wlh.AbstractFactory.Fruit;
public class NorthFruit implements Fruit {
private String name;
public NorthFruit (String name){
this.name=name;
System.out.println("生产出:...."+this.name);
}
}
北方蔬菜
package com.wlh.AbstractFactory.impl;
import com.wlh.AbstractFactory.Viggie;
public class NorthViggie implements Viggie {
private String name;
public NorthViggie(String name) {
this.name=name;
System.out.println("生产出:...."+this.name);
}
}
热带水果:
package com.wlh.AbstractFactory.impl;
import com.wlh.AbstractFactory.Fruit;
public class TropicalFruit implements Fruit {
private String name;
public TropicalFruit(String name){
this.name=name;
System.out.println("生产出:...."+this.name);
}
}
热带蔬菜
package com.wlh.AbstractFactory.impl;
import com.wlh.AbstractFactory.Viggie;
public class TropicalViggie implements Viggie {
private String name;
public TropicalViggie(String name){
this.name=name;
System.out.println("生产出:...."+this.name);
}
}
北方园丁(北方工厂)只负责生产北方产品
package com.wlh.AbstractFactory.impl;
import com.wlh.AbstractFactory.Fruit;
import com.wlh.AbstractFactory.Gardener;
import com.wlh.AbstractFactory.Viggie;
public class NorthGardener implements Gardener {
/**
* 种植北方水果
*/
public Fruit createFruit(){
return new NorthFruit("北方水果");
}
/**
* 种植北方蔬菜
*/
public Viggie createViggie(){
return new NorthViggie("北方蔬菜");
}
}
热带园丁(热带工厂)只负责生产热带产品
package com.wlh.AbstractFactory.impl;
import com.wlh.AbstractFactory.Fruit;
import com.wlh.AbstractFactory.Gardener;
import com.wlh.AbstractFactory.Viggie;
public class TropicalGardener implements Gardener{
/**
* 种植热带水果
*/
public Fruit createFruit(){
return new TropicalFruit("热带水果") ;
}
/**
* 种植热带蔬菜
*/
public Viggie createViggie(){
return new TropicalViggie("热带蔬菜");
}
}
客户端调用
package com.wlh.AbstractFactory.test;
import com.wlh.AbstractFactory.impl.NorthGardener;
import com.wlh.AbstractFactory.impl.TropicalGardener;
public class CreatTest {
/**
* @param args
*/
public static void main(String[] args) {
new TropicalGardener().createFruit();
new TropicalGardener().createViggie();
new NorthGardener().createFruit();
new NorthGardener().createViggie();
}
}
输出:
生产出:....热带水果
生产出:....热带蔬菜
生产出:....北方水果
生产出:....北方蔬菜
分享到:
相关推荐
抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种创建对象集合的接口,而无需指定具体的产品类型。这种模式适用于当系统需要在不同平台或环境中创建一组相关或相互依赖的对象时,而这些...
1. **模式结构**:抽象工厂模式通常包括抽象工厂接口(AbstractFactory),具体工厂类(ConcreteFactory),抽象产品接口(Product)以及具体产品类(ConcreteProduct)。抽象工厂定义了创建产品的方法,而具体工厂...
抽象工厂模式是设计模式中的一种创建型模式,其主要目的是为了解耦客户端代码与具体产品的实现。在软件工程中,当系统需要根据不同的平台、环境或者配置产生一系列相关对象,而这些对象之间的关系又非常复杂时,抽象...
抽象工厂模式可以帮助我们创建一个工厂接口,该接口声明了创建这些组件的方法,然后为每种操作系统实现一个具体的工厂类。 ```java // 抽象工厂接口 public interface GUIFactory { Button createButton(); ...
### 抽象工厂模式(Abstract Factory Pattern) #### 引入 在探讨抽象工厂模式之前,我们先回顾一下之前介绍过的简单工厂模式与工厂方法模式。这两种模式主要关注于解决对象创建过程中“new”操作的问题,使得创建...
在软件工程中,抽象工厂模式经常用于框架和库的开发,它可以用来封装一系列相关或相互依赖的对象的创建,使得客户端代码可以在不关心具体实现的情况下使用这些对象。这样,当需要更换不同的产品族时,只需要替换对应...
此外,抽象工厂模式还可以与其他设计模式结合使用,比如工厂方法模式(Factory Method Pattern),在某些情况下,可以将抽象工厂模式的抽象工厂类设计为工厂方法模式,让子类决定实例化哪一个类。同时,抽象工厂模式...
设计模式抽象工厂模式(AbstractFactory)源代码
抽象工厂模式是设计模式中的一种创建型模式,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。在Java编程中,这种模式通常用于隔离客户端与具体实现之间的耦合,使得系统可以在不修改代码...
抽象工厂模式是设计模式中的一种结构型模式,它在C++编程中有着广泛的应用。这个模式主要用于创建一系列相关的对象,而无需指定它们的具体类。在本文中,我们将深入探讨抽象工厂模式的概念、工作原理以及在C++中的...
抽象工厂模式(Abstract Factory Pattern)是创建型设计模式的一种,它提供了一个接口用于创建一系列相关的或相互依赖的对象,而无需指定它们具体的类。该模式的核心在于提供一个高层接口来创建一组相关的产品对象。...
这个压缩包“C# 抽象工厂 AbstractFactory.rar”可能包含了一个关于如何在C#中实现抽象工厂模式的实例或教程。 抽象工厂模式是一种创建型设计模式,它提供了一种创建对象族的方式,而无需指定具体类。在C#中,这种...
在给定的压缩包文件中,"AbstractFactory"可能包含了一些示例代码或者实现,用来解释抽象工厂模式的具体应用。这些代码可能包括抽象工厂接口、具体工厂类以及抽象产品和具体产品的定义。通过查看这些代码,我们可以...
抽象工厂模式是设计模式中的一种结构型模式,它提供了一种创建对象集合的接口,而无需指定具体的类。在Java中,这种模式常用于当系统需要根据不同的平台或环境创建不同类型的对象时,例如这里的“北方市场”和“南方...
抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象集合的接口,而无需指定具体的类。这种模式允许系统独立于如何创建、组合和表示产品对象的细节进行设计,为产品族(一组相关或相互依赖的对象)提供...
抽象工厂模式是设计模式中的一种创建型模式,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。这种模式的关键在于抽象工厂,它定义了一组创建对象的接口,允许子类决定实例化哪一个类。...
**抽象工厂模式(Abstract Factory Pattern)**是一种创建型设计模式,它提供了一种创建对象族的接口,而无需指定它们的具体类。这种模式是当一个系统需要根据不同的平台或者环境来创建一组相关或相互依赖的对象时,...
首先,我们来详细解释抽象工厂模式的基本概念。抽象工厂模式包含四个主要角色: 1. **抽象工厂(Abstract Factory)**:这是接口或者抽象类,定义了创建一系列相关或相互依赖对象的接口,而不涉及它们具体的类。 2. ...
抽象工厂模式是软件设计模式中的一种,属于创建型模式,它的主要目的是提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。在实际应用中,当我们需要创建一组具有共同特性的对象,而这些对象分别...
设计模式---抽象工厂模式(Abstract Factory)-UML图 (StarUML)