抽象工厂模式:提供一个创建一系列的相关的或者依赖的对象的接口,无需指定它们的具体实现类,具体的时间分别在子类工厂中产生。

类似于工厂模式:隔离了具体类的生产实现,使得替换具体的工厂实现类很容易。包含有以下模块:

1.抽象产品接口:定义产品的接口,公共的暴露方法。便于实际的产品类实现。

2.具体的产品类:包含实际产品的类的逻辑处理:

3.抽象工厂接口:定义产生系列对象的接口

4.具体的工厂实现:实现抽象的接口工厂,返回具体的产品类的实现。

下面是具体的代码示例:

1.抽象的产品接口,定义了Car 和 IBreakFast

package factory.simple;

/**
* 抽象产品角色 交通工具接口
*
* @author lilin
*
*/
public interface Car { /**
* 上班函数
*/
void gotowork(); }
package factory.abstractfactory;

/**
* @author lilin
*
*/
public interface IBreakFast {
/**
* 吃早餐
*/
void eat();
}

2.定义具体的产品类的实现:

package factory.simple;

/**
* 具体产品角色,自行车
*
* @author lilin
*
*/
public class Bike implements Car {
@Override
public void gotowork() {
System.out.println("骑自行车去上班!");
} }
package factory.simple;

/**
* @author lilin
*
*/
public class Bus implements Car { @Override
public void gotowork() {
System.out.println("坐公交车去上班!");
} }
/**
*
*/
package factory.abstractfactory; /**
* @author lilin
*
*/
public class Milk implements IBreakFast { @Override
public void eat() {
System.out.println("喝牛奶!");
} }
/**
*
*/
package factory.abstractfactory; /**
* @author lilin
*
*/
public class Orange implements IBreakFast { @Override
public void eat() {
System.out.println("吃橘子!");
} }

3.定义好抽象的工厂接口,一系列的获取实例的接口方法:

/**
*
*/
package factory.abstractfactory; import factory.simple.Car; /**
* @author lilin
*
*/
public interface IAbstractFactory { /**
*
* @return
*/
Car getCar(); /**
*
*/
IBreakFast getBreakFast(); }

4.定义具体的工厂生产类,具体的产品实例返回。

/**
*
*/
package factory.abstractfactory; import factory.simple.Bike;
import factory.simple.Car; /**
* @author lilin
*
*/
public class LowPersonFactory implements IAbstractFactory { @Override
public Car getCar() {
return new Bike();
} @Override
public IBreakFast getBreakFast() {
return new Orange();
} }
/**
*
*/
package factory.abstractfactory; import factory.simple.Bus;
import factory.simple.Car; /**
* @author lilin
*
*/
public class HighPersonFactory implements IAbstractFactory { @Override
public Car getCar() {
return new Bus();
} @Override
public IBreakFast getBreakFast() {
return new Milk();
}
}

最后,通过testNG简单测试下,抽象工厂模式的实现:代码如下:

/**
*
*/
package factory.abstractfactory; import org.testng.annotations.Test; import factory.simple.Car; /**
* @author lilin
*
*/
public class AbstractFactoryTest { @Test
public void test() {
IAbstractFactory factory = new LowPersonFactory();
Car car = factory.getCar();
IBreakFast breakFast = factory.getBreakFast();
System.out.println("吃的早饭是:");
breakFast.eat();
System.out.println("上班交通工具是:");
car.gotowork(); IAbstractFactory factory2 = new HighPersonFactory();
car = factory2.getCar();
breakFast = factory2.getBreakFast();
System.out.println("吃的早饭是:");
breakFast.eat();
System.out.println("上班交通工具是:");
car.gotowork();
} }

这样使用过程城中,只要注入抽象的工厂接口,具体的产品的产生,会在实际的子类工厂类中产生,也可以随意的添加和修改实际子类工厂类,而不需要改变既有的代码设计。

抽象工厂方法:一般常常使用于一套程序,需要多套实现的场景之下。

java 抽象工厂模式简单实例的更多相关文章

  1. 设计模式(四)——Java抽象工厂模式

    抽象工厂模式 1 基本介绍 1) 抽象工厂模式:定义了一个 interface 用于创建相关或有依赖关系的对象簇,而无需指明具体的类 2) 抽象工厂模式可以将简单工厂模式和工厂方法模式进行整合. 3) ...

  2. Java抽象工厂模式

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

  3. 抽象工厂模式&简单工厂模式

    抽象工厂模式 优点: 如IFactory factory=new AccessFactory(),在一个应用中只需要初始化一次,这就使得改变应用的时候变得非常容易:其次它让具体的创建实例过程与客户端分 ...

  4. Java 抽象工厂模式

    抽象工厂模式(Abstract Factory Pattern)是工厂方法模式的进一步抽象,其英文原话"Provide an interface for creating families ...

  5. PHP简单工厂模式、工厂方法模式和抽象工厂模式比较

    PHP工厂模式概念:工厂模式是一种类,它具有为您创建对象的某些方法.您可以使用工厂类创建对象,而不直接使用 new.这样,如果您想要更改所创建的对象类型,只需更改该工厂即可.使用该工厂的所有代码会自动 ...

  6. PHP简单工厂模式、工厂方法模式和抽象工厂模式

    PHP工厂模式概念:工厂模式是一种类,它具有为您创建对象的某些方法.您可以使用工厂类创建对象,而不直接使用 new.这样,如果您想要更改所创建的对象类型,只需更改该工厂即可.使用该工厂的所有代码会自动 ...

  7. iOS 抽象工厂模式

    iOS 抽象工厂模式 什么是抽象工厂模式 简单了解一下 按照惯例,我们先了解一下什么是抽象工厂模式.抽象工厂模式和工厂方法模式很相似,但是抽象工厂模式将抽象发挥的更加极致,是三种工厂模式中最抽象的一种 ...

  8. C#设计模式之:抽象工厂模式与反射

    抽象工厂模式[实例]:定义一个用于创建对象的接口,让子类决定实例化哪一个类 UML 代码class User{    private int _id;    public int Id { get = ...

  9. 抽象工厂模式(Abstract Factory Pattern)

    抽象工厂模式概述 定义:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类 抽象工厂抽象工厂,顾名思义,就是比工厂模式更抽象的工厂模式.在工厂模式中,一个具体工厂只负责生产一个具体产品 ...

随机推荐

  1. eas之常用源码整理

    //查看是否有相关权限 boolean hasAllotPermission=         PermissionFactory.getRemoteInstance().hasFunctionPer ...

  2. [tyvj1957 Poetize5] Vani和Cl2捉迷藏 (最小路径可重点覆盖+二分图最大匹配)

    传送门 Description 这片树林里有N座房子,M条有向道路,组成了一张有向无环图. 树林里的树非常茂密,足以遮挡视线,但是沿着道路望去,却是视野开阔.如果从房子A沿着路走下去能够到达B,那么在 ...

  3. 爬虫写法进阶:普通函数--->函数类--->Scrapy框架

    本文转载自以下网站: 从 Class 类到 Scrapy https://www.makcyun.top/web_scraping_withpython12.html 普通函数爬虫: https:// ...

  4. python第八周:socket网络编程

    1.socket网络编程 1.1概念: 网络套接字是跨计算机网络的连接的端点.今天,计算机之间的大多数通信都基于互联网协议;因此大多数网络套接字都是Internet套接字.更准确地说,套接字是一个句柄 ...

  5. (ccf模拟)201709-2公共钥匙盒

    #include <iostream> #include<string> #include <algorithm> #include<sstream> ...

  6. 第二次组队赛 二分&三分全场

    网址:CSUST 7月30日(二分和三分) 这次的比赛是二分&三分专题,说实话以前都没有接触过二分,就在比赛前听渊神略讲了下.......不过做着做着就对二分熟悉了,果然做题是学习的好方法啊~ ...

  7. 几种new

    http://www.cnblogs.com/luxiaoxun/archive/2012/08/10/2631812.html new .operator new 和 placement new 区 ...

  8. Web端即时通讯、消息推送的实现

    https://blog.csdn.net/DeepLies/article/details/77726823

  9. atitit.浏览器插件解决方式----ftp插件 attilax 总结

    atitit.浏览器插件解决方式----ftp插件  attilax 总结 1. 界面概览  D:云盘同步目录p5p5f tp.demo.html1 2. 初始化1 3. 事实调用2 4. 參考2 1 ...

  10. MySQL数据库管理(二)单机环境下MySQL Cluster的安装

    上文<MySQL数据库管理(一)MySQL Cluster集群简单介绍>对MySQL Cluster集群做了简要介绍.本文将教大家一步步搭建单机环境下的MySQL数据库集群. 一.单机环境 ...