概述:
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
适用性:
1.一个系统要独立于它的产品的创建、组合和表示时。
2.一个系统要由多个产品系列中的一个来配置时。
3.当你要强调一系列相关的产品对象的设计以便进行联合使用时。
4.当你提供一个产品类库,而只想显示它们的接口而不是实现时。
参与者:
1.AbstractFactory
声明一个创建抽象产品对象的操作接口。
2.ConcreteFactory
实现创建具体产品对象的操作。
3.AbstractProduct
为一类产品对象声明一个接口。
4.ConcreteProduct
定义一个将被相应的具体工厂创建的产品对象。
实现AbstractProduct接口。
5.Client
仅使用由AbstractFactory和AbstractProduct类声明的接口
示例:
package com.sql9.created;
// author : iihero
// abstract product
interface ITrainStair
{
void make();
}
interface ITrainBody
{
void make();
}
// concrete product
class NorthTrainStair implements ITrainStair
{
public void make()
{
System.out.println("生产椅子(北方样式)完成......");
}
}
class NorthTrainBody implements ITrainBody
{
public void make()
{
System.out.println("生产车身(北方样式)完成......");
}
}
class SouthTrainStair implements ITrainStair
{
public void make()
{
System.out.println("生产椅子(南方样式)完成......");
}
}
class SouthTrainBody implements ITrainBody
{
public void make()
{
System.out.println("生产车身(南方样式)完成......");
}
}
// abstract factory
interface ITrainFactory
{
ITrainStair createTrainChair();
ITrainBody createTrainBody();
}
//Concrete Factory
class NorthFactory implements ITrainFactory
{
public ITrainStair createTrainChair()
{
System.out.println("北车公司, 生产火车椅子零件(from North)...");
ITrainStair its = new NorthTrainStair();
return its;
}
public ITrainBody createTrainBody()
{
System.out.println("北车公司, 生产火车车身零件(from North)...");
ITrainBody itb = new NorthTrainBody();
return itb;
}
}
class SouthFactory implements ITrainFactory
{
public ITrainStair createTrainChair()
{
System.out.println("南车公司, 生产火车椅子零件(from South)...");
ITrainStair its = new SouthTrainStair();
return its;
}
public ITrainBody createTrainBody()
{
System.out.println("南车公司, 生产火车车身零件(from South)...");
ITrainBody itb = new SouthTrainBody();
return itb;
}
}
public class AbstractFactoryTest
{
public static void main(String[] args)
{
ITrainFactory itf = new NorthFactory();
itf.createTrainChair().make();
itf.createTrainBody().make();
itf = new SouthFactory();
itf.createTrainChair().make();
itf.createTrainBody().make();
}
}
执行结果:
北车公司, 生产火车椅子零件(from North)...
生产椅子(北方样式)完成......
北车公司, 生产火车车身零件(from North)...
生产车身(北方样式)完成......
南车公司, 生产火车椅子零件(from South)...
生产椅子(南方样式)完成......
南车公司, 生产火车车身零件(from South)...
生产车身(南方样式)完成......
总结:
当提供一类对象的创建,只想显示它们的接口而不是实现的时候,比较实用。
<script type="text/javascript"><!--
google_ad_client = "ca-pub-7104628658411459";
/* wide1 */
google_ad_slot = "8564482570";
google_ad_width = 728;
google_ad_height = 90;
//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
分享到:
相关推荐
设计模式---抽象工厂模式(Abstract Factory)-UML图 (StarUML)
java设计模式-创建者模式-简单工厂模式。详细的讲解了什么是抽象工厂模式及应用场景和应用场景的代码事例。及各工厂模式的区别。
创建型设计模式----抽象工厂模式
设计模式专题之(三)抽象工厂模式---设计模式抽象工厂模式示例代码(python--c++)
抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。
3、抽象工厂模式(Abstract Factory Pattern) 用意:一个工厂生产一系列产品
设计模式--抽象工厂模式实现多数据库连接 设计模式,.net设计模式,抽象工厂
NULL 博文链接:https://zhouhaitao.iteye.com/blog/1003684
java设计模式----抽象工厂模式,简单工厂模式代码 代码内部
博客 走进设计模式之抽象工厂(Abstract Factory) 对应代码
Abstract Factory模式 1 定义创建对象的接口,并封装对象的创建 2 将具体化类的工作延迟到了类中 3 创建创建一组相关对象或者说是一组相互依赖的对象 一般情况下,我们为了提高内聚和松耦合,经常会使用多态来...
C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式(创建型模式)
Abstract_Factory抽象工厂Abstract_Factory抽象工厂Abstract_Factory抽象工厂Abstract_Factory抽象工厂
C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式(创建型模式) (Level 300)
C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式(创建型模式) 体验课程
设计模式C++学习之抽象工厂模式(AbstractFactory)
C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式(创建型模式),.net常用设计模式。
抽象工厂模式(Abstract Factory Pattern) 引入: 在前面介绍的两个创建型模式里面,我们解决的都是有关"new"的问题,用它们来避免显式指定类创建对象。我写的也非常简单易懂,相信看过的朋友们都应该对简单工厂...
设计模式举例 抽象工厂模式 代码+用例图 设计模式, 设计模式举例-抽象工厂模式(有图有真相)