抽象工厂模式
抽象工厂模式是对象的创建模式,它是工厂方法模式的进一步推广。
抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定具体产品类型的情况下,创建多个产品族中的产品,这就是抽象工厂模式的用意。
每个模式都是针对一定问题的解决方案,抽象工厂模式面对的问题是多个产品等级结构的系统设计。
抽象工厂模式中涉及到两个概念:产品族和产品等级结构
产品族:是指位于不同产品等级结构中,功能相关联的产品组成的家族,比如:麦当劳和肯德基,这两个产品有不同的分店,北京有家麦当劳和肯德基店,上海也有家,北京的麦当劳和北京的肯德基组成一个产品族。
产品等级结构:北京的麦当劳和上海的麦当劳组成了一个产品等级结构。
示意图如下:
抽象工厂模式的结构
涉及到四个角色
1)抽象工厂角色:是抽象工厂方法模式的核心,与应用系统的商业逻辑无关。通过使用java接口或抽象类实现,而 所有的具体工厂类必须实现这个角色。
2)具体工厂角色:这个角色直接在客户端的调用下创建产品的实例,这个角色含有选择合适的产品对象的逻辑,通常使用
java类实现这个角色。
3)抽象产品角色:所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口,通常由java接口或抽象
类实现。
4)具体产品角色:抽象工厂模式所创建的任何产品对象都是某一个具体产品类的实例,这是客户端最终需要的,通常由 java类实现。
/**
* 抽象产品角色
* @author Administrator
*
*/
public interface KfcBread
{
}
/**
* 具体产品角色
* @author Administrator
*
*/
public class ShangHaiKfc implements KfcBread
{
public ShangHaiKfc()
{
System.out.println("肯德基出生地:上海");
}
}
/**
* 具体产品角色
* @author Administrator
*
*/
public class BeiJingKfc implements KfcBread
{
public BeiJingKfc()
{
System.out.println("肯德基出生地:北京");
}
}
/**
* 抽象产品角色
* @author Administrator
*
*/
public interface McdBread
{
}
/**
* 具体产品角色
* @author Administrator
*
*/
public class ShangHaiMcd implements McdBread
{
public ShangHaiMcd()
{
System.out.println("麦当劳出生地:上海");
}
}
/**
* 具体产品角色
* @author Administrator
*
*/
public class BeiJingMcd implements McdBread
{
public BeiJingMcd()
{
System.out.println("麦当劳出生地:北京");
}
}
/**
* 抽象工厂角色
* @author Administrator
*
*/
public interface Toaster
{
KfcBread toastKFC();
McdBread toastMCD();
}
/**
* 具体工厂角色
* @author Administrator
*
*/
public class ShangHaiToaster implements Toaster
{
public KfcBread toastKFC()
{
return new ShangHaiKfc();
}
public McdBread toastMCD()
{
return new ShangHaiMcd();
}
}
/**
* 具体工厂角色
* @author Administrator
*
*/
public class BeiJingToaster implements Toaster
{
public KfcBread toastKFC()
{
return new BeiJingKfc();
}
public McdBread toastMCD()
{
return new BeiJingMcd();
}
}
/**
* 测试类
* @author Administrator
*
*/
public class client
{
public static void main(String[] args)
{
Toaster t1 = new BeiJingToaster();
Toaster t2 = new ShangHaiToaster();
McdBread mcd1 = t1.toastMCD();
McdBread mcd2 = t2.toastMCD();
KfcBread kfc1 = t1.toastKFC();
KfcBread kfc2 = t2.toastKFC();
}
}
分享到:
相关推荐
JAVA设计模式之抽象工厂模式,一个不错的列子,逻辑比好清晰,让你更好的理解抽象工厂
java设计模式之抽象工厂模式实例,希望对大家有所帮助。
Java设计模式之抽象工厂模式
Java实现的工厂模式,抽象工厂,工厂方法模式
介绍的是工厂模式 包括简单工厂模式、工厂方法模式、抽象工厂模式 包括PPT和代码
Java设计模式之抽象工厂模式
抽象工厂模式 JAVA设计模式
java,设计模式中的一种,抽象工厂设计模式。
java 图书展(抽象工厂模式) java 图书展(抽象工厂模式)
c++ java 抽象工厂模式
Java设计模式之抽象工厂模式.pdf
JAVA设计模式研究之抽象工厂模式,工厂设计模式
java设计模式【之】抽象工厂模式【源码】【场景:制作咖啡】 * 抽象工厂 * * 创建对象实例时,不要直接 new 类, 而是把这个new 类的动作放在一个工厂的方法中,并返回。 * 在工厂方法的基础上,进一步抽象工厂...
java设计模式 抽象工厂模式详解 一张图让你彻底明白抽象工厂模式
JAVA设计模式研究之抽象工厂模式
Java设计模式,抽象工厂的Demo,具体的思想与实现有很多讲得很好的老师,我是看厉风行老师的视频学的,讲得不错,简单易懂
一个具体工厂创建一个产品族,一个产品族是不同系列产品的组合,产品的创建的逻辑分在在每个具体工厂类...如果没有应对“多系列对象创建”的需求变化,则没有必要使用抽象工厂模式,这时候使用简单的静态工厂完全可以。
基于Java实现的23种设计模式Demo,抽象工厂模式、建造模式、工厂方法模式、原型模式、单例模式、外观模式、适配器模式等 Java设计模式共有23种,分别为:抽象工厂模式、建造模式、工厂方法模式、原型模式、单例模式...