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、适用性:
·一个系统要独立他的产品创建、组合和表示时。
·一个系统要用多个产品系列中的一个来配置时
·要强调一系列相关的产品对象和对象的设计以便进行联合使用时
·提供一个产品类库,而只想显示他们的接口而不是实现时
附件:包含了能直接运行的代码示例。
分享到:
相关推荐
工厂模式分为三种主要类型:简单工厂模式、工厂方法模式和抽象工厂模式。 1. **简单工厂模式** 简单工厂模式是最简单的工厂模式实现,它提供一个静态方法或者类来创建对象,这个类通常被称为“工厂”。用户只需要...
抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象集合的接口,而无需指定具体的类。这种模式允许系统独立于如何创建、组合和表示产品对象的细节进行设计,为产品族(一组相关或相互依赖的对象)提供...
在软件设计模式中,工厂模式是一组非常基础且实用的设计模式,主要分为简单工厂模式、工厂方法模式和抽象工厂模式。这些模式都是为了解决对象创建的问题,通过封装对象的创建过程,使得代码更加灵活,易于扩展和维护...
java设计模式 抽象工厂模式详解 一张图让你彻底明白抽象工厂模式
工厂方法模式和抽象工厂模式是两种常见的设计模式,它们都属于创建型模式,用于解决对象的创建问题。在软件设计中,这两种模式都是用来隔离对象的创建和使用,以提高系统的灵活性和可扩展性。 首先,工厂方法模式的...
设计模式 - 抽象工厂模式 抽象工厂模式是一种创建型设计模式,它提供了一种方式来创建一组相关或相互依赖的对象,而不需要指定具体的类。该模式允许客户端使用抽象的接口来创建一组相关的产品,而不需要关系实际...
本文将探讨三个重要的设计模式:抽象工厂模式、工厂方法模式以及策略模式,并结合一个实际的场景——手机加工厂,来具体阐述它们的应用。 首先,我们来看**抽象工厂模式**。这个模式主要用于创建相关或依赖对象的...
抽象工厂模式是软件工程中常用的一种创建型设计模式,它的核心思想是为创建一组相关或相互依赖的对象提供一个接口,而不需要指定它们具体的类。在Java中,抽象工厂模式被广泛应用,它有助于整合代码,提高系统的可...
抽象工厂模式是设计模式中的一种创建型模式,它提供了一个创建对象族的接口,而无需指定它们的具体类。在.NET开发中,这种模式常用于实现多数据库连接,比如连接到MySQL、SQL Server或Oracle等不同的数据库系统。...
抽象工厂模式是一种设计模式,属于创建型模式,它提供了一种创建对象族的接口,而无需指定其具体的类。这种模式的关键在于“族”,它表示一系列相关或相互依赖的对象。在不指定具体类的情况下,抽象工厂模式使得...
抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象族的接口,而无需指定具体的类。在C#编程中,这种模式经常被用于实现跨平台或跨框架的代码,使得代码与具体实现解耦,提高系统的灵活性和可扩展性。...
### 抽象工厂模式简介与应用实例 #### 一、抽象工厂模式定义 抽象工厂模式是一种创建型设计模式,它能够让我们从一个公共接口中创建一系列相关或相互依赖的对象,而无需指定它们的具体类。该模式的核心在于提供了...
抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象族的接口,而无需指定其具体的类。这种模式的关键在于“族”,即一系列相关的对象。在抽象工厂模式中,我们创建一个抽象工厂接口,然后为每一种具体...
在这个压缩包中,包含了三种工厂模式的C++实现:简单工厂模式、工厂方法模式以及抽象工厂模式。让我们一一探讨这些模式。 1. 简单工厂模式: 简单工厂模式是一种静态工厂方法,它提供一个公共的工厂类来创建对象。...
抽象工厂模式是设计模式中的一种,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。在软件工程中,当系统需要在运行时选择不同的产品族时,或者想要隔离具体产品的实现细节时,抽象工厂...
抽象工厂模式是设计模式中的一种结构型模式,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。在Android开发中,这种模式尤其有用,因为Android平台有多种设备,每种设备可能有不同的UI...
抽象工厂模式是设计模式中的一种,它属于创建型模式,主要解决的是当系统有多个产品族,而每个产品族又有多个具体产品时,如何组织代码的问题。在Java中,抽象工厂模式提供了一种创建对象组的方式,使得这些对象属于...
抽象工厂模式是一种面向对象的设计模式,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。在C#中,这种模式经常用于软件工程中的框架设计,允许系统独立于具体产品的实现进行扩展和修改。...
在软件设计模式中,工厂方法模式(Factory Method Pattern)和抽象工厂模式(Abstract Factory Pattern)是两种常用的创建型设计模式,它们都属于“工厂”家族,但有着不同的应用场景和目标。 工厂方法模式的核心...
抽象工厂模式是一种创建型设计模式,它提供了一种创建对象族的方法,而无需指定它们的具体类。在计算器的实现中,这个模式可以帮助我们构建不同类型的计算器,比如简单计算器、科学计算器等,而无需修改现有代码。 ...