`
BestUpon
  • 浏览: 290755 次
  • 性别: Icon_minigender_1
  • 来自: 兰州
社区版块
存档分类
最新评论

抽象工厂模式

阅读更多

package org.bestupon.abstratfactory.product;

public class Product2OtherProtory implements OtherProtory{

	private String otherProtoryStr;
	
	public String otherProtoryInfo(String protoryInfo) {
		this.otherProtoryStr = protoryInfo;
		return otherProtoryStr;
	}

	public void printOtherProtoryInfo() {
		System.out.println(this.otherProtoryStr);
	}

}

 再看看这个抽象的工厂是干什么的?

 

package org.bestupon.abstratfactory.fatory;

import org.bestupon.abstratfactory.product.OtherProtory;
import org.bestupon.abstratfactory.product.ProductColor;


public interface AbstratFactory {
	public OtherProtory createOtherProtory();
	public ProductColor createProductColor();
	
}

 

他负责创建了一系列的产品(组装一个产品的抽象属性,这样理解比较好理解,比如汽车和轮胎,和底座等关系参照)。

每一种产品都有一个自己实现类,那就是:

package org.bestupon.abstratfactory.fatory;

import org.bestupon.abstratfactory.product.OtherProtory;
import org.bestupon.abstratfactory.product.Product1OtherProtory;
import org.bestupon.abstratfactory.product.Product1ProductColor;
import org.bestupon.abstratfactory.product.ProductColor;

public class Product1Factory  implements AbstratFactory{
	
	Product1OtherProtory product1OtherProtory = null;
	Product1ProductColor product1ProductColor = null;
	
	public OtherProtory createOtherProtory() {
		product1OtherProtory = new Product1OtherProtory();
		product1OtherProtory.otherProtoryInfo("产品一的其他属性");
		return product1OtherProtory;
	}

	public ProductColor createProductColor() {
		product1ProductColor = new Product1ProductColor();
		product1ProductColor.otherProductColor("产品一的颜色");
		return product1ProductColor;
	}

}

 

还有:

package org.bestupon.abstratfactory.fatory;

import org.bestupon.abstratfactory.product.OtherProtory;
import org.bestupon.abstratfactory.product.Product2OtherProtory;
import org.bestupon.abstratfactory.product.Product2ProductColor;
import org.bestupon.abstratfactory.product.ProductColor;

public class Product2Factory  implements AbstratFactory{
	
	Product2OtherProtory product2OtherProtory = null;
	Product2ProductColor product2ProductColor = null;
	
	public OtherProtory createOtherProtory() {
		product2OtherProtory = new Product2OtherProtory();
		product2OtherProtory.otherProtoryInfo("产品【二】的其他属性");
		return product2OtherProtory;
	}

	public ProductColor createProductColor() {
		product2ProductColor = new Product2ProductColor();
		product2ProductColor.otherProductColor("产品【二】的颜色");
		return product2ProductColor;
	}

}

 

 

看看简单的客户端:

package org.bestupon.abstratfactory.client;

import org.bestupon.abstratfactory.fatory.AbstratFactory;
import org.bestupon.abstratfactory.fatory.Product1Factory;
import org.bestupon.abstratfactory.fatory.Product2Factory;
import org.bestupon.abstratfactory.product.OtherProtory;
import org.bestupon.abstratfactory.product.ProductColor;

public class Client {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		AbstratFactory abstratFactory = new Product1Factory();
		OtherProtory otherProtory = abstratFactory.createOtherProtory();
		otherProtory.printOtherProtoryInfo();
		ProductColor productColor = abstratFactory.createProductColor();
		productColor.printOtherProductColor();
		//以上是系列一的产品,下面是系列二产品,注意更换了接口
		abstratFactory = new Product2Factory();
		otherProtory = abstratFactory.createOtherProtory();
		otherProtory.printOtherProtoryInfo();
		productColor = abstratFactory.createProductColor();
		productColor.printOtherProductColor();
		
		
	}

}

 

看看以上的产品的,客户端要创建一列系列的产品,只需要更换一次接口,而其他的方法都是一模一样的。

 

注意:区别以上代码中,中产品一和产品二,其实都是一系列的意思。

 

 

使用抽象工厂模式(Abstract Factory)的意图很简单:那就是:提供一个创建一系列相关或者相互依赖对象的接口,而无需指定她们具体的类。

 

 

 

 

使用抽象工厂模式可以实现的效果:

 =  由工厂封装产品对象的创建,将客户端与产品类的实现相分离

 =  容易更换产品系列。简单只在换一系列产品的工厂制造接口

 =  有利于产品的一致性。同属于一系列的产品

 =  难以支持新产品的添加,因为要添加新产品就要更换产品工厂的interface接口。

抽象工厂一般有以下的实现方式:

   >∞通常将同系列的产品工厂作为Singleton。

   >∞AbstractFactory声明创建产品的接口,由工厂子类负责创建产品,通常为每个产品定义一个工厂方法。

   >∞还一种不常用的就是使用参数方式创建对象,这种设计不太安全,所以很少使用。

现在以第二种实现方式为例说明AbstractFactory。

首先从需要创建的产品说起,组装一个产品,肯定有很多的产品零部件,或者产品的属性。

1.ProductColor是产品的一个抽象属性。

package org.bestupon.abstratfactory.product;

public interface ProductColor {
	public String otherProductColor(String productColor);
	public void printOtherProductColor();
}

 

2、产品还有其他的属性OtherProtory。

package org.bestupon.abstratfactory.product;

public interface OtherProtory {
	public String otherProtoryInfo(String protoryInfo);
	public void printOtherProtoryInfo();
}

 

两个抽象属性的实现类如下:

Product1ProductColor代表产品一的ProductColor实现,Product1OtherProtory代表产品一的OtherProtory实现。同理有Product2ProductColor代表产品一的ProductColor实现,Product2OtherProtory代表产品一的OtherProtory实现。注意体会一系列的含义。

见代码:

package org.bestupon.abstratfactory.product;

public class Product1ProductColor implements ProductColor {

	private String colorString ;	
	
	public String otherProductColor(String productColor) {
		this.colorString = productColor;
		return colorString;
	}

	public void printOtherProductColor() {
		System.out.println(this.otherProductColor(this.colorString));
	}

}

 

 

package org.bestupon.abstratfactory.product;

public class Product1OtherProtory implements OtherProtory{

	private String otherProtoryStr;
	
	public String otherProtoryInfo(String protoryInfo) {
		this.otherProtoryStr = protoryInfo;
		return otherProtoryStr;
	}

	public void printOtherProtoryInfo() {
		System.out.println(this.otherProtoryStr);
	}

}

 

package org.bestupon.abstratfactory.product;

public class Product2ProductColor implements ProductColor {

	private String colorString ;	
	
	public String otherProductColor(String productColor) {
		this.colorString = productColor;
		return colorString;
	}

	public void printOtherProductColor() {
		System.out.println(this.otherProductColor(this.colorString));
	}

}

  

 

抽象工厂模式的优缺点分析:

 1、优点:多个产品同时创建。客户端代码简洁。
  一个具体的工厂创建一系列相互联系的产品,使得客户端的调用非常简单,原因是一系列的产品被
 设计到一个工厂类中来创建。客户端需要创建另外一些列的产品,只需要更换一个产品创建类就可以了。
 2、缺点:增加新产品的话,需要修改工厂类(接口),以及其实现类。
 3、使用时机:在客户端需要同时创建一些列比较固定的对象时,可以考虑使用抽象工厂模式。

 4、适用性:

  ·一个系统要独立他的产品创建、组合和表示时。

  ·一个系统要用多个产品系列中的一个来配置时

  ·要强调一系列相关的产品对象和对象的设计以便进行联合使用时

  ·提供一个产品类库,而只想显示他们的接口而不是实现时

 

 附件:包含了能直接运行的代码示例。

0
0
分享到:
评论

相关推荐

    工厂模式:简单工厂模式、工厂方法模式、抽象工厂模式

    工厂模式分为三种主要类型:简单工厂模式、工厂方法模式和抽象工厂模式。 1. **简单工厂模式** 简单工厂模式是最简单的工厂模式实现,它提供一个静态方法或者类来创建对象,这个类通常被称为“工厂”。用户只需要...

    设计模式-抽象工厂模式(讲解及其实现代码)

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象集合的接口,而无需指定具体的类。这种模式允许系统独立于如何创建、组合和表示产品对象的细节进行设计,为产品族(一组相关或相互依赖的对象)提供...

    简单工厂模式-工厂方法模式-抽象工厂模式

    在软件设计模式中,工厂模式是一组非常基础且实用的设计模式,主要分为简单工厂模式、工厂方法模式和抽象工厂模式。这些模式都是为了解决对象创建的问题,通过封装对象的创建过程,使得代码更加灵活,易于扩展和维护...

    抽象工厂模式uml类图

    java设计模式 抽象工厂模式详解 一张图让你彻底明白抽象工厂模式

    工厂方法模式和抽象工厂模式的区别

    工厂方法模式和抽象工厂模式是两种常见的设计模式,它们都属于创建型模式,用于解决对象的创建问题。在软件设计中,这两种模式都是用来隔离对象的创建和使用,以提高系统的灵活性和可扩展性。 首先,工厂方法模式的...

    设计模式 - 抽象工厂模式

    设计模式 - 抽象工厂模式 抽象工厂模式是一种创建型设计模式,它提供了一种方式来创建一组相关或相互依赖的对象,而不需要指定具体的类。该模式允许客户端使用抽象的接口来创建一组相关的产品,而不需要关系实际...

    抽象工厂模式+工厂方法模式+策略模式+类图实现手机加工厂

    本文将探讨三个重要的设计模式:抽象工厂模式、工厂方法模式以及策略模式,并结合一个实际的场景——手机加工厂,来具体阐述它们的应用。 首先,我们来看**抽象工厂模式**。这个模式主要用于创建相关或依赖对象的...

    肯德基:抽象工厂模式

    抽象工厂模式是软件工程中常用的一种创建型设计模式,它的核心思想是为创建一组相关或相互依赖的对象提供一个接口,而不需要指定它们具体的类。在Java中,抽象工厂模式被广泛应用,它有助于整合代码,提高系统的可...

    设计模式--抽象工厂模式实现多数据库连接

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一个创建对象族的接口,而无需指定它们的具体类。在.NET开发中,这种模式常用于实现多数据库连接,比如连接到MySQL、SQL Server或Oracle等不同的数据库系统。...

    抽象工厂模式案例代码

    抽象工厂模式是一种设计模式,属于创建型模式,它提供了一种创建对象族的接口,而无需指定其具体的类。这种模式的关键在于“族”,它表示一系列相关或相互依赖的对象。在不指定具体类的情况下,抽象工厂模式使得...

    C#抽象工厂模式

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象族的接口,而无需指定具体的类。在C#编程中,这种模式经常被用于实现跨平台或跨框架的代码,使得代码与具体实现解耦,提高系统的灵活性和可扩展性。...

    抽象工厂模式简单小例子

    ### 抽象工厂模式简介与应用实例 #### 一、抽象工厂模式定义 抽象工厂模式是一种创建型设计模式,它能够让我们从一个公共接口中创建一系列相关或相互依赖的对象,而无需指定它们的具体类。该模式的核心在于提供了...

    设计模式-抽象工厂模式

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象族的接口,而无需指定其具体的类。这种模式的关键在于“族”,即一系列相关的对象。在抽象工厂模式中,我们创建一个抽象工厂接口,然后为每一种具体...

    简单工厂模式、工厂模式、抽象工厂模式案例(C++实现)

    在这个压缩包中,包含了三种工厂模式的C++实现:简单工厂模式、工厂方法模式以及抽象工厂模式。让我们一一探讨这些模式。 1. 简单工厂模式: 简单工厂模式是一种静态工厂方法,它提供一个公共的工厂类来创建对象。...

    抽象工厂模式+反射技术(抽象工厂模式+简单工厂模式)

    抽象工厂模式是设计模式中的一种,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。在软件工程中,当系统需要在运行时选择不同的产品族时,或者想要隔离具体产品的实现细节时,抽象工厂...

    Android抽象工厂模式demo

    抽象工厂模式是设计模式中的一种结构型模式,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。在Android开发中,这种模式尤其有用,因为Android平台有多种设备,每种设备可能有不同的UI...

    java设计模式-抽象工厂模式

    抽象工厂模式是设计模式中的一种,它属于创建型模式,主要解决的是当系统有多个产品族,而每个产品族又有多个具体产品时,如何组织代码的问题。在Java中,抽象工厂模式提供了一种创建对象组的方式,使得这些对象属于...

    C#抽象工厂模式案例代码

    抽象工厂模式是一种面向对象的设计模式,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。在C#中,这种模式经常用于软件工程中的框架设计,允许系统独立于具体产品的实现进行扩展和修改。...

    工厂方法模式和抽象工厂模式

    在软件设计模式中,工厂方法模式(Factory Method Pattern)和抽象工厂模式(Abstract Factory Pattern)是两种常用的创建型设计模式,它们都属于“工厂”家族,但有着不同的应用场景和目标。 工厂方法模式的核心...

    抽象工厂模式实现计算器

    抽象工厂模式是一种创建型设计模式,它提供了一种创建对象族的方法,而无需指定它们的具体类。在计算器的实现中,这个模式可以帮助我们构建不同类型的计算器,比如简单计算器、科学计算器等,而无需修改现有代码。 ...

Global site tag (gtag.js) - Google Analytics