简单理解抽象工厂模式

定义:

抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态,,当有多个抽象角色时,使用的一种工厂模式,它向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。

注意:
注意产品族的概念:

是指位于不同产品等级结构中,功能相关联的产品组成的家族。一般是位于不同的等级结构中的相同位置上。显然,每一个产品族中含有产品的数目,与产品等级结构的数目是相等的,形成一个二维的坐标系,水平坐标是产品等级结构,纵坐标是产品族。叫做相图。
详细参考:

http://baike.baidu.com/view/1580269.htm?fr=ala0_1
示例:某人喜欢做什么

注意看这“某人喜欢”与“做什么”,这可以理解为两个产品族,他们在逻辑上存在一定的关系,但又是绝对的相互独立,以下我们以“奶奶喜欢种苹果”、“爷爷喜欢种香蕉”的示例来说明。

示例中有两个产品族,那我们首先得为这两个产品族建立相应的工厂,

某人喜欢

public interface FamilyPerson {

public void like();

}


种什么(以水果为例)

public interface Fruit {

public void plant();

}


好了,以上就定义了“某人喜欢”与“种什么”两个工厂了,后面再来分别定义他们的实现类,首先定义“某人”的爷爷、奶奶实现类:

爷爷:

public class GrandePa implements FamilyPerson {

public void like() {

System.out.println("Grandpa likes ");

}

}


奶奶:

public class GrandeMa implements FamilyPerson {

public void like() {

System.out.println("Grandma likes ");

}

}


再定义“种什么”的苹果、香蕉实现类:

苹果:

public class Apple implements Fruit {

public void plant() {

System.out.println("Plant Apple.");

}

}


香蕉:

public class Banana implements Fruit {

public void plant() {

System.out.println("Plant Banana");

}

}


好了,基础的工厂都有了,现在需要一个抽象工厂了,呵,就是同时引用多个基础工厂的工厂,定下“爱好”工厂如下:

public interface Hobby {

public Fruit getFruit();

public FamilyPerson getFamilyPerson();

}


实现爷爷喜欢种香蕉:

public class GrandePaHobby implements Hobby {

public FamilyPerson getFamilyPerson() {

return new GrandePa();

}

public Fruit getFruit() {

return new Banana();

}

}


实现奶奶喜欢种苹果:

public class GrandeMaHobby implements Hobby {

public FamilyPerson getFamilyPerson() {

return new GrandeMa();

}

public Fruit getFruit() {

return new Apple();

}

}


一切OK,来个调用实例:

public class Test1 {

public static void main(String[] args) {

Hobby hobby = new GrandeMaHobby();

hobby.getFamilyPerson().like();

hobby.getFruit().plant();

}

}


输出:

Grandma likes 

Plant Apple.



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/fenglibing/archive/2010/04/20/5506794.aspx
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值