abstract factory(抽象工厂) 对象创建型模式

原创 2015年07月08日 14:50:42


每一个模式都有其适用的场景,不乱套敢质疑是学习的根本。另外模式是抽象的,不是一蹴而就的。要多多回顾。

abstract factory(抽象工厂) 对象创建型模式一,

意图:提供一个接口,让该接口负责创建一系列相关或者相互依赖的对象,无需指定它们具体的类。

注意两点:

1.一系列对象,也就是说产品不是一个,是多个,

2.相关或者相互依赖,这些产品是相互相关,至于相关才能抽象出不同系列抽象工厂

二,适用性

1、一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节,这对于所有形态的工厂模式都是重要的;(要通过工厂模式生产)

2、这个系统有多于一个的产品组合,而系统只需要使用其中某一产品组合;(产品有系列)

3、同属于同一个产品组合的产品是在一起使用的,这一约束必须在系统的设计中体现出来;(抽象工厂决定了具体工厂)

4、系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于具体实现;(实现产品和客户分离)

三,结构

四,参与者

抽象工厂(Abstract Factory)角色:声明一个抽象方法用于创建抽象产品业务。

具体工厂(Concrete Factory)角色:实现这个抽象工厂的具体对象。

抽象产品(Abstract Product)角色:声明一个抽象的产品对象具体产品(Concrete Product)角色:

实现抽象产品对象。

客户 (Client) 角色:调用抽象工厂来实现某个具体的产品。

五,协作

1.通常在运行时刻创建一个ConcreteFactory类的实例。这一具体的工厂创建具有特定实现的产品对象。为创建不同的产品对象,客户端应使用不同的具体工厂。

2.AbstractFactory将产品对象的创建延迟到它的ConcreteFactory子类。

六,实现

1,它分离了具体的类

Abstract Factory模式帮助你控制一个应用创建的对象的类。因为一个工厂封装创建产品对象的责任和过程,它将客户与类的实现分离。客户通过它们的抽象接口操纵实例。产品的类名也在具体工厂的实现中被分离;它们不出现在客户代码中。

2,它使得易于交换产品系列

一个具体工厂类在一个应用中仅出现一次——即在它初始化的时候。这使得改变一个应用的具体工厂变得容易。它只需改变具体的工厂即可使用不同的产品配置,这是因为一个抽象工厂创建了一个完整的产品系列,所以整个产品系列会立刻改变。

3,它有利于产品的一致性

当一系列中的产品对象被设计成一起工作时,一个应用一次只能使用同一个系列中的对象,这一点很重要。而AbstractFactory很容易实现这一点。

4,难以支持新种类的产品难以扩展

抽象工厂以生产新种类的产品。这是因为AbstractFactory接口确定了可以被创建的产品集合。支持新种类的产品就需要扩展该工厂接口,这将涉及AbstractFactory类及其所有子类的改变。

自己写的例子。客户向工厂定制衣服,可以区分为春装,夏装,秋装等,而一件套装定义为上衣和裤子,利用抽象工厂模式,就可以把具体工厂定义为春装,夏装工厂,抽象工厂负责与客户交互。春装工厂组装是生产的是春装上衣和春装裤子,依次可以定义出春装系列,夏装系列,秋装系列。

package abstractfactory;
// 上衣
public abstract class Coat {
	public abstract Coat getCoat();
}
// 裤子
package abstractfactory;

public abstract class Pants {
public abstract Pants getPants();
}
package abstractfactory;
//春装上衣
public class SpringCoat extends Coat{

	@Override
	public SpringCoat getCoat() {
		// TODO Auto-generated method stub
		return new SpringCoat();
	}

}

package abstractfactory;
//春装裤子
public class SpringPants extends Pants {

	@Override
	public SpringPants getPants() {
		// TODO Auto-generated method stub
		return new SpringPants();
	}

}

package abstractfactory;
// 夏装上衣
public class SummerCoat extends Coat{

	@Override
	public SummerCoat getCoat() {
		// TODO Auto-generated method stub
		return new SummerCoat();
	}

}

package abstractfactory;
// 夏装裤子
public class SummerPants extends Pants {

	@Override
	public SummerPants getPants() {
		// TODO Auto-generated method stub
		return new SummerPants();
	}

}

package abstractfactory;
// 抽象套装工厂
public abstract class SuitFactory {
	public abstract Pants createPants();

	public abstract Coat createCoat();
}

package abstractfactory;
// 春装生产工厂
public class SpringSuitFactory extends SuitFactory {

	@Override
	public Pants createPants() {
		// TODO Auto-generated method stub
		return new SpringPants();
	}

	@Override
	public Coat createCoat() {
		// TODO Auto-generated method stub
		return new SpringCoat();
	}

}

package abstractfactory;
//夏装生产工厂
public class SummerSuitFactory extends SuitFactory {

	@Override
	public Pants createPants() {
		// TODO Auto-generated method stub
		return new SummerPants();
	}

	@Override
	public Coat createCoat() {
		// TODO Auto-generated method stub
		return new SummerCoat();
	}

}

package abstractfactory;
// 客户端下订单
public class Client {
	public void orderSuit(SuitFactory sf) {
		sf.createCoat();
		sf.createPants();
	}
}

抽象工厂模式要点:

1.产品是多样的成系列的并且相关连依赖的

2.客户与类的实现分离,对内可以易于交换产品系列,对外隐藏了实现细节

3.如果我突然想在套装里面加一个帽子产品,改变幅度较大,涉及面较广,也就是耦合度较高

没有一个模式是完美的,活学活用最重要。

ABSTRACT FACTORY抽象工厂 - 对象创建型模式(四)

1,.意图 提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。 2.别名 Kit 3.动机 考虑一个支持多种视感标准的用户界面工具包,列入Motif和Presentatio...

Abstract Factory(抽象工厂)--对象创建型模式

1.意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 2.适用: (1)一个系统要独立于它的产品的创建,组合和表示时。 (2)一个系统要由多个产品系列中的一个来配置时。...

1.1 Abstract Factory(抽象工厂) -- 对象创建型模式

模式定义:         抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。         抽象工厂允许客户使用抽象的接口来创建一组相关产品,而不需要知道实际产出...

Cocos2d-x3.2与设计模式(一)创建型模式之ABSTRACT FACTORY(抽象工厂)--对象创建型模式

12356
  • cbbbc
  • cbbbc
  • 2014年08月30日 23:42
  • 993

创建型模式之抽象工厂ABSTRACT FACTORY

意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。一、工厂模式与抽象工厂模式区别工厂模式抽象工厂模式与工厂模式类似。不过处理的问题更为复杂。工厂模式中我们处理的是不同图形的面积...

[设计模式-创建型]抽象工厂(Abstract Factory)

概括 名称 Abstract Factory 结构 动机 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 ...

C++设计模式 -> 创建型 -> 抽象工厂(Abstract Factory)

抽象工厂模式(Abstract Factory)工厂车逻辑头文件Base_Factory.h#ifndef FACTORY_H #define FACTORY_H#include "Base_Prod...

创建型模式:抽象工厂(Abstract Factory)

抽象工厂

设计模式(1) 创建型模式和抽象工厂(Abstract Factory)

问题聚焦:分别用一句话概括这节的几个知识点 1 什么是创建型模式:抽象了实例化过程 2 创建型模式有哪些:抽象工厂,工厂方法,原型模式,生成器模式 3 什么是抽象工厂(AbstractFactory)...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:abstract factory(抽象工厂) 对象创建型模式
举报原因:
原因补充:

(最多只允许输入30个字)