一、什么是抽象工厂模式

  抽象工厂模式是所有形态的工厂模式中最为抽 象和最其一般性的。抽象工厂模式可以向客户端 提供一个接口,使得客户端在不必指定产品的具 体类型的情况下,能够创建多个产品族的产品对 象。

二、产品族和产品等级结构

三、模式中包含的角色及其职责

  1.抽象工厂(Creator)角色抽象工厂模式的核心,包含对多个产品结构的声明,任何工厂类都必须实现这个接口。

  2.具体工厂( Concrete Creator)角色具体工厂类是抽象工厂的一个实现,负责实例化某个产品族中的产品对象。

   3.抽象(Product)角色抽象模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。

  4.具体产品(Concrete Product)角色抽象模式所创建的具体实例对象 总结:抽象工厂中方法对应产品结构,具体工厂对应产品族。

抽象苹果  实现水果

 public abstract class Apple implements Fruit{
/*
* 采集
*/
public abstract void get();
}

抽象香蕉  实现水果

 public abstract class Banana implements Fruit{
/*
* 采集
*/
public abstract void get();
}

水果接口

 public interface Fruit {
/*
* 采集
*/
public void get();
}

水果工厂接口

 public interface FruitFactory {
//实例化Apple
public Fruit getApple();
//实例化Banana
public Fruit getBanana();
}

北方苹果  继承苹果

 public class NorthApple extends Apple {

     public void get() {
System.out.println("采集北方苹果");
}
}

北方香蕉  继承香蕉

 public class NorthBanana extends Banana {

     public void get() {
System.out.println("采集北方香蕉");
}
}

北方水果工厂  实现水果工厂

 public class NorthFruitFactory implements FruitFactory {

     public Fruit getApple() {
return new NorthApple();
} public Fruit getBanana() {
return new NorthBanana();
}
}

南方苹果  继承苹果

 public class SouthApple extends Apple {

     public void get() {
System.out.println("采集南方苹果");
}
}

南方香蕉  继承香蕉

 public class SouthBanana extends Banana {

     public void get() {
System.out.println("采集南方香蕉");
}
}

南方水果工厂  实现水果工厂

 public class SouthFruitFactory implements FruitFactory {

     public Fruit getApple() {
return new SouthApple();
} public Fruit getBanana() {
return new SouthBanana();
}
}

温室苹果  继承苹果

 public class WenshiApple extends Apple {

     public void get() {
System.out.println("采集温室苹果");
}
}

温室香蕉  继承香蕉

 public class WenshiBanana extends Banana {

     public void get() {
System.out.println("采集温室香蕉");
}
}

温室水果工厂  实现水果工厂

 public class WenshiFruitFactory implements FruitFactory {

     public Fruit getApple() {
return new WenshiApple();
} public Fruit getBanana() {
return new WenshiBanana();
}
}

03抽象工厂模式AbstractFactory的更多相关文章

  1. 【java设计模式】-03抽象工厂模式

    抽象工厂 简述 抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类.在抽象工厂模式中,接口是负责创建一个相关对象的工厂 ...

  2. 设计模式-抽象工厂模式(AbstractFactory)(创建型模式)

    //以下代码来源: 设计模式精解-GoF 23种设计模式解析附C++实现源码 //Product.h #pragma once class AbstractProductA { public: vir ...

  3. 设计模式——抽象工厂模式(AbstractFactoryPattern)

    抽象工厂模式(AbstractFactory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类. UML图: IFactory: package com.cnblog.clarck ...

  4. php 23种设计模型 - 抽象工厂模式

    抽象工厂模式(AbstractFactory) 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创 ...

  5. 桥接模式及C++实现 C++设计模式-AbstractFactory抽象工厂模式

    桥接模式及C++实现 桥接模式 先说说桥接模式的定义:将抽象化(Abstraction)与实现化(Implementation)分离,使得二者可以独立地变化. 桥接模式号称设计模式中最难理解的模式之一 ...

  6. 设计模式(4)--AbstractFactory(抽象工厂模式)--创建型

    1.模式定义: 抽象工厂是应对产品族概念的,提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类 2.模式特点: 抽象工厂模式为创建一组对象提供了一种解决方案.与工厂方法模式相比,抽象工 ...

  7. C#设计模式之四抽象工厂模式(AbstractFactory)【创建型】

    一.引言     写了3篇有关设计模式的文章了,大家有了些反馈,说能从中学到一些东西,我感到很欣慰,那就继续努力.今天我要写第四个模式了,该模式叫抽象工厂.上一篇文章我们讲了[工厂方法]模式,它是为了 ...

  8. C#设计模式之三抽象工厂模式(AbstractFactory)【创建型】

    一.引言 写了3篇有关设计模式的文章了,大家有了些反馈,说能从中学到一些东西,我感到很欣慰,那就继续努力.今天我要写第四个模式了,该模式叫抽象工厂.上一篇文章我们讲了[工厂方法]模式,它是为了解决[简 ...

  9. 八、AbstractFactory 抽象工厂模式

    设计原理: 代码清单: 抽象 Factory : public abstract class Factory { public static Factory getFactory(String cla ...

随机推荐

  1. web开发必备的浏览器常识

    浏览器内核: 1.使用Trident内核的浏览器:IE.Maxthon.TT.The World等: 2.使用Gecko内核的浏览器:Netcape6及以上版本.FireFox.MozillaSuit ...

  2. POST数据中有特殊符号导致数据丢失的解决方法

    使用Ajax传送数据时,当数据中存在加号(+).连接符(&)或者百分号(%)时,服务器端接收数据时会丢失数据.分析Ajax传送数据的格式与Javascript的语法: 1. "+&q ...

  3. Java项目收藏

    数据库 MyCat:数据库中间件 IM.消息推送 t-io:不仅仅是百万级即时通讯框架 tio-im:基于t-io写的IM,主要目标降低即时通讯门槛,实现多端不同协议间的消息发送如http.webso ...

  4. android: ADB错误“more than one device and emulator”

    启动模拟器调试,执行ADB指令时,报错.C:\Users\gaojs>adb shellerror: more than one device and emulatorC:\Users\gaoj ...

  5. windows多线程同步--信号量

    推荐参考博客:秒杀多线程第八篇 经典线程同步 信号量Semaphore   首先先介绍和windows信号量有关的两个API:创建信号量.释放信号量   HANDLE WINAPI CreateSem ...

  6. Duplicate复制数据库并创建物理StandBy(spfile+不同实例名)

    过程和Duplicate复制数据库并创建物理StandBy类似,只是不需要重启数据库. 目的:创建standby,不重启源数据库 1设定环境如下: Primary数据库 IP 172.17.22.16 ...

  7. 最新Android & iOS设计尺寸规范

    Android 和 iPhone.iPad以及主流手机屏幕的分辨率和相关设计尺寸规范 <点击看大图>

  8. 4.翻译系列:EF 6 Code-First默认约定(EF 6 Code-First系列)

    原文地址:http://www.entityframeworktutorial.net/code-first/code-first-conventions.aspx EF 6 Code-First系列 ...

  9. git代码统计

    1.统计一段时间的代码量 git log --format='%aN' | sort -u | while read name; do echo -en "$name\t"; gi ...

  10. java协变逆变,PECS

    public static void main(String[] args) { // Object <- Fruit <- Apple <- RedApple System.out ...