前面学习了简单工厂和工厂方法模式,今天来学习工厂模式中最最抽象的一种-- 抽象工厂模式。抽象工厂模式比工厂方法处理的问题更具有抽象性与一般性。它们的区别在于: 工厂方法模式针对的是一个产品等级结构;而抽象工厂模式是针对多个产品等级结构而出现的。
说的通俗点,一个产品等级结构就是一类产品类的总称;例如: 运动鞋,休闲鞋,皮鞋等,所有鞋的种类就构成一个鞋的等级结构。而当两个或两个以上具有相同或相似等级结构的产品组合在一起时,或者在此基础上添加新的产品等级结构时,使用抽象工厂模式,就为这种添加或修改带来了更好的灵活性。下面以一个例子来说明抽象工厂模式的实用性。
在学习工厂方法模式的时候,提到了一个例子,制鞋厂扩大生成规模,由本来只生产一种类型的鞋子,扩大到生产各色各样的鞋子类型。现在制鞋厂又想进一步扩大自己的市场;在原来制造鞋子的基础上,也制造衣服。并且希望推出其对应的运行型套装,商务型套装,休闲型套装等等一系列的自主品牌产品。这样问题就来了,如果以原来工厂方法的模式来设计,一个具体产品,对应一个具体工厂,那么新加入服饰产品,也要相应提供其具体服饰产品的工厂类。这样就会造成工厂泛滥的情况。在实际中,也不可能会出现为生成一种产品,就建一个工厂的情况。
所以,我们就必须考虑使用抽象工厂模式去解决以上的问题。将同一类型的不同产品统一由一个具体工厂创建。下面为该例子的代码实现。
/**
* 鞋子产品抽象类
* @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();
}
}
分享到:
相关推荐
该文档内容为用C#编写的软件设计模式之抽象工厂实验报告
NET设计模式之抽象工厂模式[归纳].pdf
JAVA设计模式之抽象工厂模式,一个不错的列子,逻辑比好清晰,让你更好的理解抽象工厂
java设计模式之抽象工厂模式实例,希望对大家有所帮助。
博客 走进设计模式之抽象工厂(Abstract Factory) 对应代码
设计模式之抽象工厂模式
Java设计模式之抽象工厂模式
23种设计模式之抽象工厂模式对抽象工厂模式进行了简单的介绍,并附带了例子程序,和大家分享
C#设计模式之抽象工厂(abstract factory)模式示例源代码
Java设计模式之抽象工厂模式
Java设计模式之抽象工厂模式.pdf
c# 设计模式之抽象工厂模式 本人没有积分啦, 向你乞讨一点啦。
C#设计模式之抽象工厂模式[参照].pdf
抽象工厂模式 JAVA设计模式
抽象工厂设计模式抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式
本文介绍了抽象工厂模式的定义、使用场景、主要角色以及相应的类图,并提供了Java示例代码以帮助读者更好地理解该模式的实现方法。抽象工厂模式为创建一组相关或相互依赖的对象提供了一个接口,而不需要指定它们的...
NULL 博文链接:https://f303153041.iteye.com/blog/1679092
一个具体工厂创建一个产品族,一个产品族是不同系列产品的组合,产品的创建的逻辑分在在每个具体工厂类...如果没有应对“多系列对象创建”的需求变化,则没有必要使用抽象工厂模式,这时候使用简单的静态工厂完全可以。
php抽象工厂写的小例子,目的是想形象地去描述这一设计模式理念