抽象工厂模式与工厂方法模式的最大区别就在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则需要面对多个产品等级结构。
产品族:是指位于不同产品等级结构中,功能相关联的产品组成的家族。
显然,每一个产品族中含有产品的数目,与产品等级结构的数目是相等的。产品的等级结构和产品族将产品按照不同的方向划分,形成一个二维的坐标系,如下图所示。
在坐标图中有四个产品族,分布于三个产品等级结构中。
在上面的坐标图中,横轴表示产品等级结构,纵轴表示产品族。可以看出,图中一共有四个产品族,分布于三个不同的产品等级结构中。只要指明一个产品所处的产品族以及它所属的等级结构,就可以唯一地确定这个产品。
这样的坐标图,叫做相图。在一个相图中,坐标轴代表抽象的自由度,相图中的两个坐标点之间的绝对距离并没有意义,有意义的是点与点的相对位置。
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
分享到:
相关推荐
NULL 博文链接:https://hnzhoujunmei.iteye.com/blog/1032977
博客 走进设计模式之抽象工厂(Abstract Factory) 对应代码
3、抽象工厂模式(Abstract Factory Pattern) 用意:一个工厂生产一系列产品
C#设计模式之抽象工厂(abstract factory)模式示例源代码
抽象工厂模式(Abstract Factory Pattern) 引入: 在前面介绍的两个创建型模式里面,我们解决的都是有关"new"的问题,用它们来避免显式指定类创建对象。我写的也非常简单易懂,相信看过的朋友们都应该对简单工厂...
设计模式抽象工厂模式(AbstractFactory)源代码
设计模式C++学习之抽象工厂模式(AbstractFactory)
抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。
java之 抽象工厂模式(abstract factory) 之水果类和蔬菜类 (香蕉、梨、黄瓜、大蒜),北方市场,南方市场。。
Abstract_Factory抽象工厂Abstract_Factory抽象工厂Abstract_Factory抽象工厂Abstract_Factory抽象工厂
设计模式---抽象工厂模式(Abstract Factory)-UML图 (StarUML)
在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时由于需求的变化,往往存在着更多系列对象的创建工作。如何应对这种变化?如何绕过常规的对象的创建方法(new),...这就是我们要说的抽象工厂模式。
生产餐具和相应食物的工厂,有两个车间,其中一个车间用以生产餐具,一个车间用以生产相应的食物。 每个具体工厂生产出来的具体产品根据不同工厂的不同各不相同,但是客户使用产品的方法是一致的。比如客户在得到...
NULL 博文链接:https://zhouhaitao.iteye.com/blog/1003684
设计模式,AbstractFactory,抽象工厂模式
抽象工厂模式可以实现不同数据库之间的无缝移植。 该项目是在三层架构的基础上改进的。希望对初学者有帮助。
Abstract Factory模式 1 定义创建对象的接口,并封装对象的创建 2 将具体化类的工作延迟到了类中 3 创建创建一组相关对象或者说是一组相互依赖的对象 一般情况下,我们为了提高内聚和松耦合,经常会使用多态来...
里面是整个抽象工厂的实现,具体可以参见我的博客 http://blog.csdn.net/renlei0109/article/details/25242983
6、抽象工厂模式ABSTRACT FACTORY PATTERN 7、门面模式FACADE PATTERN 8、适配器模式ADAPTER PATTERN 9、模板方法模式TEMPLATE METHOD PATTERN 10、建造者模式BUILDER PATTERN 11、桥梁模式BRIDGE PATTERN 12、...