`

设计模式之 抽象工厂

阅读更多

  前面学习了简单工厂和工厂方法模式,今天来学习工厂模式中最最抽象的一种-- 抽象工厂模式。抽象工厂模式比工厂方法处理的问题更具有抽象性与一般性。它们的区别在于: 工厂方法模式针对的是一个产品等级结构;而抽象工厂模式是针对多个产品等级结构而出现的。

 

  说的通俗点,一个产品等级结构就是一类产品类的总称;例如: 运动鞋,休闲鞋,皮鞋等,所有鞋的种类就构成一个鞋的等级结构。而当两个或两个以上具有相同或相似等级结构的产品组合在一起时,或者在此基础上添加新的产品等级结构时,使用抽象工厂模式,就为这种添加或修改带来了更好的灵活性。下面以一个例子来说明抽象工厂模式的实用性。

 

  在学习工厂方法模式的时候,提到了一个例子,制鞋厂扩大生成规模,由本来只生产一种类型的鞋子,扩大到生产各色各样的鞋子类型。现在制鞋厂又想进一步扩大自己的市场;在原来制造鞋子的基础上,也制造衣服。并且希望推出其对应的运行型套装,商务型套装,休闲型套装等等一系列的自主品牌产品。这样问题就来了,如果以原来工厂方法的模式来设计,一个具体产品,对应一个具体工厂,那么新加入服饰产品,也要相应提供其具体服饰产品的工厂类。这样就会造成工厂泛滥的情况。在实际中,也不可能会出现为生成一种产品,就建一个工厂的情况。

 

  所以,我们就必须考虑使用抽象工厂模式去解决以上的问题。将同一类型的不同产品统一由一个具体工厂创建。下面为该例子的代码实现。

 

/**
 * 鞋子产品抽象类
 * @author Administrator
 *
 */
public abstract class Shoe {
	/*
	 * 鞋子属性
	 */
	private String color; // 鞋子颜色
	private String size; // 码数
	
	/*
	 * 提供默认的构造方法
	 */
	public Shoe(){
		this.color = "红色";
		this.size = "43";
	}
	
	/*
	 * 行为
	 */
	public abstract void walk();
	
                /*
                 * 访问其属性的方法
           */
	public String showColor(){
		return this.color;
	}
	
	public String showSize(){
		return this.size;
	}

 

/**
 * 运动鞋产品类
 * @author Administrator
 *
 */
public class SportShoe extends Shoe {

	@Override
	public void walk() {
		// TODO Auto-generated method stub
		System.out.println("do something...");
	}

}

 

 

/**
 * 商务型皮鞋
 * @author Administrator
 *
 */
public class BuniessShoe extends Shoe {

	@Override
	public void walk() {
		// TODO Auto-generated method stub
		System.out.println("do something...");
	}

}

 

 

/*
 * 衣服抽象类
 */
public abstract class Clothes {

	/*
	 * 属性
	 */
	private String color;
	private String size;
	
	public Clothes(){
		this.color = "红色";
		this.size = "180cm";
	}
	
	public abstract void wear();

 

public class SportClothes extends Clothes {

	@Override
	public void wear() {
		// TODO Auto-generated method stub
		System.out.println("sport wear...");
	}

}

 

public class BuniessClothes extends Clothes {

	@Override
	public void wear() {
		// TODO Auto-generated method stub
		System.out.println("buniess wear...");
	}

}

 

工厂类

 

/**
  * 抽象工厂类,类中定义了两个创建方法
  */
public abstract class Factory {
                // 生产鞋子
	public abstract Shoe createShoe();
	// 生产衣服
	public abstract Clothes createClothes();
}

 

/**
 * 运动型品牌工厂类
 * @author Administrator
 *
 */
public class SportFactory extends Factory {

	@Override
	public Clothes createClothes() {
		// TODO Auto-generated method stub
		return new SportClothes();
	}

	@Override
	public Shoe createShoe() {
		// TODO Auto-generated method stub
		return new SportShoe();
	}

}

 

/**
 * 商务型品牌工厂类
 * @author Administrator
 *
 */
public class BuniessFactory extends Factory {

	@Override
	public Clothes createClothes() {
		// TODO Auto-generated method stub
		return new BuniessClothes();
	}

	@Override
	public Shoe createShoe() {
		// TODO Auto-generated method stub
		return new BuniessShoe();
	}

}

  

    测试类

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		/**
		 * 抽象工厂模式的测试类
		 */
		// 首先我想使用一个运动工厂,创建一套运动服
		Factory sportFactory = new SportFactory();
		Clothes sportClothes = sportFactory.createClothes();
		Shoe sportShoe = sportFactory.createShoe();
		
		sportClothes.wear();
		sportShoe.walk();
		
		// 然后我想创建一个商务工厂,创建一套商务套装
		Factory buniessFactory = new BuniessFactory();
		Clothes buniessClothes = buniessFactory.createClothes();
		Shoe buniessShoe = buniessFactory.createShoe();
		
		buniessClothes.wear();
		buniessShoe.walk();
		
	}

}

 

分享到:
评论

相关推荐

    JAVA设计模式之抽象工厂

    **JAVA设计模式之抽象工厂** 在软件工程中,设计模式是一种通用的解决方案,用来解决在特定上下文中反复出现的问题。抽象工厂(Abstract Factory)模式是其中一种创建型设计模式,它提供一个创建对象的接口,但允许...

    NET设计模式之抽象工厂模式[归纳].pdf

    《NET设计模式之抽象工厂模式》 抽象工厂模式是设计模式中的一种,属于创建型模式,它的主要目的是为了解决在软件系统中,面对一系列相互依赖的对象的创建问题。这种模式提供了一个创建一系列相关或相互依赖对象的...

    走进设计模式之抽象工厂(Abstract Factory)

    总之,"走进设计模式之抽象工厂"这篇博客深入探讨了抽象工厂模式的原理、实现方式、应用场景及其优缺点,旨在帮助读者理解并有效地运用这一设计模式。通过阅读博客和分析提供的代码示例,开发者可以更好地掌握抽象...

    JAVA设计模式之抽象工厂模式

    在"JAVA设计模式之抽象工厂模式"的示例中,可能会包含这些角色的实现以及如何在实际场景中应用抽象工厂模式的解释和示例代码。这个压缩包可能包含了详细的设计和实现,帮助学习者深入理解抽象工厂模式的工作原理及其...

    Java设计模式之抽象工厂模式

    总结来说,Java设计模式之抽象工厂模式是一种用来创建一系列相关对象的设计模式,它通过提供抽象工厂接口来隔离具体产品的创建,使系统具备更好的扩展性和封装性。在实际开发中,我们可以根据需求选择使用抽象工厂...

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

    java设计模式之抽象工厂模式实例,希望对大家有所帮助。

    Java设计模式之抽象工厂模式.zip

    通过阅读《Java设计模式之抽象工厂模式.pdf》这份文档,你可以更深入地理解抽象工厂模式的原理、实现方式以及如何在Java项目中应用这一模式。文档中可能涵盖了模式的优缺点、实例分析、与其他设计模式的比较等内容,...

    23种设计模式之抽象工厂模式Java示例代码

    ### 23种设计模式之抽象工厂模式Java示例代码详解 #### 概述 抽象工厂模式(Abstract Factory Pattern)是面向对象设计模式中的一个重要成员,属于创建型模式的一种。它提供了一种创建一系列相关或相互依赖对象的...

    C#设计模式之抽象工厂(abstract factory)模式示例源代码

    ### C#设计模式之抽象工厂(Abstract Factory)模式详解 #### 概述 抽象工厂模式(Abstract Factory Pattern)是创建型设计模式的一种,它提供了一个接口用于创建一系列相关的或相互依赖的对象,而无需指定它们具体的...

    Java编程23种设计模式之抽象工厂模式

    **Java编程23种设计模式之抽象工厂模式** 在软件工程中,设计模式是一种解决常见问题的经验总结,其中抽象工厂模式是一种创建型设计模式。它提供了一种创建对象族的接口,而无需指定它们的具体类。这个模式尤其适用...

    23钟设计模式之抽象工厂模式

    23种设计模式之抽象工厂模式对抽象工厂模式进行了简单的介绍,并附带了例子程序,和大家分享

    设计模式之抽象工厂模式-c++

    抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,提供一个接口用于创建一系列相关或相互依赖的对象,而无需指定它们的具体类。这种模式常用于需要跨多个产品系列进行实例化的场景。 抽象工厂模式的...

    设计模式之抽象工厂模式

    抽象工厂模式是软件设计模式中的一种创建型模式,它的核心思想是提供一个接口,用于创建一系列相关或相互依赖的对象,而无需指定它们的具体类。在实际应用中,它常用于跨平台开发或者需要构建复杂的对象组合时,允许...

    JAVA设计模式之抽象工厂模式案例

    抽象工厂模式是软件设计模式中的一种,属于创建型模式,它提供了一种创建对象组族的接口,而无需指定其具体类。这种模式的关键在于抽象工厂,它定义了一组产品对象的接口,并且允许子类根据不同的实现来生产一系列...

    Java设计模式之抽象工厂模式.docx

    抽象工厂模式是设计模式中的一种,属于创建型模式,它为创建一组相关或相互依赖的对象提供了一个统一的接口,使得客户端无需关注这些对象的具体实现细节,仅需与抽象工厂交互即可。这种模式遵循开放封闭原则(OCP)...

    c# 设计模式之抽象工厂模式

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象集合的接口,而无需指定具体的类。在C#编程中,这种模式经常被用来处理不同平台或环境下的对象创建问题,使得代码能够更好地适应变化,提高系统的...

Global site tag (gtag.js) - Google Analytics