`
conkeyn
  • 浏览: 1524797 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

抽象工厂模式(Abstract factory)

 
阅读更多

      抽象工厂模式与工厂方法模式的最大区别就在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则需要面对多个产品等级结构。

 

 

      产品族:是指位于不同产品等级结构中,功能相关联的产品组成的家族。

 

显然,每一个产品族中含有产品的数目,与产品等级结构的数目是相等的。产品的等级结构和产品族将产品按照不同的方向划分,形成一个二维的坐标系,如下图所示。

      在坐标图中有四个产品族,分布于三个产品等级结构中。
      在上面的坐标图中,横轴表示产品等级结构,纵轴表示产品族。可以看出,图中一共有四个产品族,分布于三个不同的产品等级结构中。只要指明一个产品所处的产品族以及它所属的等级结构,就可以唯一地确定这个产品。
      这样的坐标图,叫做相图。在一个相图中,坐标轴代表抽象的自由度,相图中的两个坐标点之间的绝对距离并没有意义,有意义的是点与点的相对位置。

 

package abstract_factory;

public interface Animal {

	public void eat();

	public void sleep();
}

 

package abstract_factory;

public interface Person {

	public void eat();

	public void talk();
}
 
package abstract_factory;

public interface NWFactory {
	public Person createPerson(String type);

	public Animal createAnimal(String type);
}

 
package abstract_factory;

public class YanSheng implements NWFactory {
	Man m = null;
	Bulk b = null;

	public Man createPerson(String type) {
		try {
			m = (Man) Class.forName("abstract_factory." + type).newInstance();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return m;
	}

	public Bulk createAnimal(String type) {
		try {
			b = (Bulk) Class.forName("abstract_factory." + type).newInstance();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return b;
	}

}

 

package abstract_factory;

public class YinSheng implements NWFactory {
	Woman w = null;
	Cow c = null;

	public Woman createPerson(String type) {
		try {
			w = (Woman) Class.forName("abstract_factory." + type).newInstance();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return w;
	}

	public Cow createAnimal(String type) {
		try {
			c = (Cow) Class.forName("abstract_factory."+type).newInstance();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return c;
	}

}
 
package abstract_factory;

public class Man implements Person {

	public void eat() {
		System.out.println("男人在吃饭!");
	}

	public void talk() {
		System.out.println("男人在说话!");
	}

}
 
package abstract_factory;

public class Woman implements Person {

	public void eat() {
		System.out.println("女人在吃饭!");
	}

	public void talk() {
		System.out.println("女人在说话!");
	}

}
 
package abstract_factory;

public class Bulk implements Animal {

	public void eat() {
		System.out.println("公牛在吃草!");
	}

	public void sleep() {
		System.out.println("公牛在睡觉!");
	}

}
 
package abstract_factory;

public class Cow implements Animal {

	public void eat() {
		System.out.println("母牛在吃草!");
	}

	public void sleep() {
		System.out.println("母牛在睡觉!");
	}

}
 
package abstract_factory;

public class Client{

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		NWFactory yanSheng = new YanSheng();
		NWFactory yinSheng = new YinSheng();
		Person man = yanSheng.createPerson("Man");
		man.eat();
		man.talk();
		Animal bulk = yanSheng.createAnimal("Bulk");
		bulk.eat();
		bulk.sleep();
		Person woment = yinSheng.createPerson("Woman");
		woment.eat();
		woment.talk();
		Animal cow = yinSheng.createAnimal("Cow");
		cow.eat();
		cow.sleep();
	}
}
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 大小: 29.2 KB
  • 大小: 37.2 KB
  • 大小: 17.7 KB
分享到:
评论

相关推荐

    抽象工厂模式abstractFactory

    抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种创建对象集合的接口,而无需指定具体的产品类型。这种模式适用于当系统需要在不同平台或环境中创建一组相关或相互依赖的对象时,而这些...

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

    1. **模式结构**:抽象工厂模式通常包括抽象工厂接口(AbstractFactory),具体工厂类(ConcreteFactory),抽象产品接口(Product)以及具体产品类(ConcreteProduct)。抽象工厂定义了创建产品的方法,而具体工厂...

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

    1. 抽象工厂(Abstract Factory):这是模式的核心,它是一个接口或抽象类,定义了一系列创建对象的方法,但并不直接实例化具体的对象。这些方法用于创建一系列相关或相互依赖的对象。 2. 具体工厂(Concrete ...

    通过python实现抽象工厂模式(Abstract Factory Pattern).rar

    抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种在不指定具体类的情况下创建一系列相关或相互依赖对象的接口。这个模式使得客户端代码与具体产品的实现解耦,从而提高了系统的灵活性和...

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

    1. 抽象工厂(Abstract Factory):这是模式的核心,定义了一组创建对象的接口,客户端通过这个接口请求创建所需的产品。这个接口不直接创建产品,而是将产品创建的职责委托给具体工厂。 2. 具体工厂(Concrete ...

    抽象工厂模式(Abstract Factory Pattern)

    ### 抽象工厂模式(Abstract Factory Pattern) #### 引入 在探讨抽象工厂模式之前,我们先回顾一下之前介绍过的简单工厂模式与工厂方法模式。这两种模式主要关注于解决对象创建过程中“new”操作的问题,使得创建...

    设计模式之-抽象工厂-AbstractFactory

    抽象工厂(Abstract Factory)设计模式是软件工程中一种重要的创建型设计模式,它提供了一种创建对象组的方式,这些对象属于同一族系并且彼此相关。这个模式的主要目标是定义一个接口,用于创建一族相关或相互依赖的...

    抽象工厂AbstractFactory

    抽象工厂(Abstract Factory)模式是一种创建型设计模式,它提供了一种创建对象的接口,但允许子类决定实例化哪一个类。这种模式是基于对象的抽象,而不是具体的类,因此,它允许创建一系列相关的对象,而无需指定...

    抽象工厂模式(AbstractFactory)源代码

    设计模式抽象工厂模式(AbstractFactory)源代码

    设计模式C++学习之抽象工厂模式(AbstractFactory)

    在这个例子中,`AbstractProductA`和`AbstractProductB`是抽象产品,`ConcreteProductA1/A2`和`ConcreteProductB1/B2`是具体产品,`AbstractFactory`是抽象工厂,`ConcreteFactory1/2`是具体工厂。客户端代码通过...

    C# 抽象工厂 AbstractFactory.rar

    这个压缩包“C# 抽象工厂 AbstractFactory.rar”可能包含了一个关于如何在C#中实现抽象工厂模式的实例或教程。 抽象工厂模式是一种创建型设计模式,它提供了一种创建对象族的方式,而无需指定具体类。在C#中,这种...

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

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

    通过C#实现抽象工厂模式(Abstract Factory Pattern).rar

    在C#中实现抽象工厂模式(Abstract Factory Pattern)涉及定义一个抽象工厂接口,该接口声明用于创建抽象产品的方法。然后,为每个具体产品族实现一个具体工厂,这些工厂提供创建具体产品的实现。最后,客户端代码...

    抽象工厂模式(AbstractFactory)

    在给定的压缩包文件中,"AbstractFactory"可能包含了一些示例代码或者实现,用来解释抽象工厂模式的具体应用。这些代码可能包括抽象工厂接口、具体工厂类以及抽象产品和具体产品的定义。通过查看这些代码,我们可以...

    java之 抽象工厂模式(abstract factory)

    1. **抽象工厂接口(Abstract Factory)**:定义了创建一组相关或相互依赖对象的接口,而不指定它们的具体类。在这个例子中,可以有一个`MarketFactory`接口,它声明了创建水果和蔬菜的方法,如`createFruit()`和`...

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

    1. 抽象工厂(Abstract Factory):定义一个创建对象的接口,但不指定具体的产品实现,而是由具体的工厂类来实现。 2. 具体工厂(Concrete Factory):实现了抽象工厂接口,负责创建具体的产品对象。 3. 抽象产品...

    设计模式 之 “抽象工厂模式[Abstract Factory Pattern]”

    **抽象工厂模式(Abstract Factory Pattern)**是一种创建型设计模式,它提供了一种创建对象族的接口,而无需指定它们的具体类。这种模式是当一个系统需要根据不同的平台或者环境来创建一组相关或相互依赖的对象时,...

    AbstractFactory 抽象工厂

    抽象工厂(Abstract Factory)模式是设计模式中的一种创建型模式,它提供了一种...在阅读提供的博客文章《AbstractFactory 抽象工厂》和研究压缩包中的相关文件时,你可以深入学习到更多关于这个模式的实践和应用场景。

    Abstract_Factory抽象工厂

    Abstract_Factory抽象工厂Abstract_Factory抽象工厂Abstract_Factory抽象工厂Abstract_Factory抽象工厂

Global site tag (gtag.js) - Google Analytics