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

目的:

提供一个接口来创建一族相互依赖的对象,不用明确指出实体类。

什么时候用:

  • 一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节,这对于所有形态的工厂模式都是重要的。
  • 这个系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。
  • 同属于同一个产品族的产品是在一起使用的,这一约束必须在系统的设计中体现出来。
  • 系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于实现。

实际的例子:

示例代码:

public class App {
	public static void main(String[] args) {
		createKingdom(new ElfKingdomFactory());
		createKingdom(new OrcKingdomFactory());
	}

	public static void createKingdom(KingdomFactory factory) {
		King king = factory.createKing();
		Castle castle = factory.createCastle();
		Army army = factory.createArmy();
		System.out.println("The kingdom was created.");
		System.out.println(king);
		System.out.println(castle);
		System.out.println(army);
	}
}
public interface King {

}
public interface Castle {

}
public interface Army {

}
public interface Army {

}
<pre name="code" class="java">public interface KingdomFactory {

	Castle createCastle();

	King createKing();

	Army createArmy();

}

public class ElfKingdomFactory implements KingdomFactory {

	public Castle createCastle() {
		return new ElfCastle();
	}

	public King createKing() {
		return new ElfKing();
	}

	public Army createArmy() {
		return new ElfArmy();
	}

}
public class OrcKingdomFactory implements KingdomFactory {

	public Castle createCastle() {
		return new OrcCastle();
	}

	public King createKing() {
		return new OrcKing();
	}

	public Army createArmy() {
		return new OrcArmy();
	}

}
public class ElfArmy implements Army {

	@Override
	public String toString() {
		return "This is the Elven Army!";
	}

}
public class ElfKing implements King {

	@Override
	public String toString() {
		return "This is the Elven king!";
	}

}
public class ElfCastle implements Castle {

	@Override
	public String toString() {
		return "This is the Elven castle!";
	}

}
public class OrcArmy implements Army {

	@Override
	public String toString() {
		return "This is the Orcish Army!";
	}

}
public class OrcCastle implements Castle {

	@Override
	public String toString() {
		return "This is the Orcish castle!";
	}

}
public class OrcKing implements King {

	@Override
	public String toString() {
		return "This is the Orc king!";
	}

}

输出结果:

The kingdom was created.
This is the Elven king!
This is the Elven castle!
This is the Elven Army!
The kingdom was created.
This is the Orc king!
This is the Orcish castle!
This is the Orcish Army!

@斗大的熊猫

时间: 2024-07-31 17:00:03

Java设计模式-抽象工厂模式(Abstract Factory)的相关文章

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

抽象工厂模式(abstract factory pattern) 详解 本文地址: http://blog.csdn.net/caroline_wendy/article/details/27091671 参考工厂模式: http://blog.csdn.net/caroline_wendy/article/details/27081511 抽象工厂模式: 提供一个接口, 用于创建相关或依赖对象的家族, 而不需要明确指定具体类. 全部代码: http://download.csdn.net/de

设计模式 - 抽象工厂模式(abstract factory pattern) 具体解释

抽象工厂模式(abstract factory pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/27091671 參考工厂模式: http://blog.csdn.net/caroline_wendy/article/details/27081511 抽象工厂模式: 提供一个接口, 用于创建相关或依赖对象的家族, 而不须要明白指定详细类. 所有代码: http://download.csdn.net/

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

二十三种设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 1 package com.example.main; 2 3 import android.app.Activity; 4 import

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

二十三种设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 1 <?php 2 /* 3 * php设计模式——抽象工厂模式(Abstract Factory) 4 */ 5 6 7 /* 8 * I

Objective-C设计模式——抽象工厂模式Abstract Factory(对象创建)

抽象工厂模式 理解了工厂方法模式,其实抽象工厂和工厂方法模式有很多的相似之处.抽象工厂同样是分离客户端对象的创建和逻辑代码的,但是抽象工厂往往是产生一组数据而不单单是产生一个产品. 抽象工厂提供一个创建一系列相关或相互依赖对象接口,而无需制定它们具体的类. 抽象工厂与工厂方法 抽象工厂 通过对象组合创建抽象产品 创建多系列产品 必须修改父类的接口才能支持新的产品 工厂方法 通过类继承创建抽象产品 创建一种产品 子泪花创建者并重载工厂方法以创建新产品 Demo 比较多就不一一的贴代码了,截类图 客

【设计模式】 抽象工厂模式 Abstract Factory Pattern

简单工厂模式是一个工厂类根据工厂方法的参数创建不出不同的产品, 工厂方法模式是每一个产品都有一个一一对应的工厂负责创建该产品.那么今天要讲的抽象工厂模式是一个工厂能够产生关联的一系列产品.抽象工厂模式相对于简单工厂和工厂方法模式来着更具抽象性. 一.抽象工厂模式演绎 我们先来看一个简单的需求: 甲方要开发一套办公自动化软件,其中有一个非常重要的功能就是要能够导入Word 文档和Excel 文档. 开发人员拿到需求后就开始编码了,  很快代码写完了: public class ImportTool

二十四种设计模式:抽象工厂模式(Abstract Factory Pattern)

抽象工厂模式(Abstract Factory Pattern) 介绍提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 示例有Message和MessageModel,Message有一个Insert()方法,该方法的参数是MessageModel. AbstractMessageModel using System; using System.Collections.Generic; using System.Text; namespace Pattern.Abstract

Java设计模式之工厂模式(Factory模式)介绍(转载)

原文见:http://www.jb51.net/article/62068.htm 这篇文章主要介绍了Java设计模式之工厂模式(Factory模式)介绍,本文讲解了为何使用工厂模式.工厂方法.抽象工厂.Java工厂模式举例等内容,需要的朋友可以参考下 工厂模式定义:提供创建对象的接口. 为何使用工厂模式 工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见. 为什么工厂模式是如此常用?因为工厂模式就相当于创建实例对象的new,我们经

抽象工厂模式(Abstract Factory)C#实例

抽象工厂模式(Abstract Factory)C#实例 本文出处http://www.dofactory.com/net/abstract-factory-design-pattern 一.场景描述 本实例描述了抽象工厂模式的一个使用场景.在动物世界弱肉强食,食肉动物会吃掉食草动物.这是动物世界的规律,因此在动物世界类中有Runfoodchain(运行食物链)方法.在动物世界里总是有食肉动物和食草动物这两个抽象成员.它们之所以是抽象成员是因为他们不是具体的一种动物.而食草动物与食肉动物的区别在

JAVA 设计模式 抽象工厂模式

用途 抽象工厂模式 (Abstract Factory) 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 抽象工厂模式是一种创建型模式. 结构 图-抽象工厂模式结构图 AbstractProduct : 声明一个接口,这个接口中包含产品对象类型. abstract class AbstractProductA {     public abstract void show(); } abstract class AbstractProductB {     public a