定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。

(1)定义产品接口

/**
* 第一种系列的产品
* @author Administrator
*
*/
interface IProduct1{
public void show();
} /**
* 第二种系列的 产品
* @author Administrator
*
*/
interface IProduct2{
public void show();
}

(2)产品的具体实现类

/**
* 产品的具体实现类1
* @author Administrator
*
*/
class Product1 implements IProduct1{
public void show()
{
System.out.println("product1");
}
} /**
* 产品的具体实现类2
* @author Administrator
*
*/
class Product2 implements IProduct2{
public void show(){
System.out.println("product2");
}
}

(3)定义工厂接口

/**
* 工厂接口
* @author Administrator
*
*/
interface IFactory {
public IProduct1 createProduct1();
public IProduct2 createProduct2();
}

(6)工厂的实现类

/**
* 工厂的实现类
* @author Administrator
*
*/
class Factory implements IFactory{
/**
* 创建第一种产品
*/
@Override
public Product1 createProduct1(){
return new Product1();
}
/**
* 创建第二种产品
*/
@Override
public Product2 createProduct2(){
return new Product2();
}
}

(7)模拟客户端的使用

/**
* 客户端的模拟类
* @author Administrator
*
*/
public class Client {
public static void main(String[] args){
//创建工厂
IFactory factory=new Factory();
//生产产品1
Product1 product1=(Product1) factory.createProduct1();
product1.show();
//生产产品2
Product2 product2=(Product2) factory.createProduct2();
product2.show();
}
}

可以使用同一个工厂创建多个相关或者相互依赖的对象,不需要具体指明要生产对象的类,只需要说明部分特性(一部分特性由生产对象的工厂来决定)

完整代码

package com.songyan.designpattern;

/**
* 第一种系列的产品
* @author Administrator
*
*/
interface IProduct1{
public void show();
} /**
* 第二种系列的 产品
* @author Administrator
*
*/
interface IProduct2{
public void show();
} /**
* 产品的具体实现类1
* @author Administrator
*
*/
class Product1 implements IProduct1{
public void show()
{
System.out.println("product1");
}
} /**
* 产品的具体实现类2
* @author Administrator
*
*/
class Product2 implements IProduct2{
public void show(){
System.out.println("product2");
}
} /**
* 工厂接口
* @author Administrator
*
*/
interface IFactory {
public IProduct1 createProduct1();
public IProduct2 createProduct2();
} /**
* 工厂的实现类
* @author Administrator
*
*/
class Factory implements IFactory{
/**
* 创建第一种产品
*/
@Override
public Product1 createProduct1(){
return new Product1();
}
/**
* 创建第二种产品
*/
@Override
public Product2 createProduct2(){
return new Product2();
}
} /**
* 客户端的模拟类
* @author Administrator
*
*/
public class Client {
public static void main(String[] args){
//创建工厂
IFactory factory=new Factory();
//生产产品1
Product1 product1=(Product1) factory.createProduct1();
product1.show();
//生产产品2
Product2 product2=(Product2) factory.createProduct2();
product2.show();
}
}

AbstractFactory的更多相关文章

  1. C++设计模式-AbstractFactory抽象工厂模式

    AbstractFactory 要创建一组相关或者相互依赖的对象 作用:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. UML结构图: 抽象基类: 1)AbstractProdu ...

  2. factory工厂模式之抽象工厂AbstractFactory

    * 抽象工厂: 意图在于创建一系列互相关联或互相依赖的对象. * 每个工厂都会创建一个或多个一系列的产品 * 适用于:产品不会变动,开始时所有产品都创建好,然后根据分类获取想要的 某一类产品(很像sp ...

  3. 设计模式系列 1——StaticFactory(静态工厂),AbstractFactory(抽象工厂)

    本文出自 代码大湿 代码大湿 本系列持续更新,敬请关注. 1 静态工厂 静态工厂介绍: 静态工厂模式可以实现接口封装隔离的原则.在客户端只知接口而不知实现的时候可以使用静态工厂模式. 源码请点击我 角 ...

  4. AbstractFactory 模式

    ///////////////////////Product.h////////////// #ifndef _PRODUCT_H_ #define _PRODUCT_H_ class Abstrac ...

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

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

  6. Factory and AbstractFactory ——抽象与具体的分离

    Factory and AbstractFactory——抽象与具体的分离 面向对象标准关注于抽取一系列事物的共同行为,组建一个基类.行为再划分成两类: 1:现在及以后不太可能会变化的行为. 2:以后 ...

  7. 抽象工厂(AbstractFactory)模式-创建型模式

    1.new 的问题 常见的对象创建方法: //创建一个Road对象 Road road=new Road(); new的问题:实现依赖,不能应对具体实例的变化 怎么理解上面这句话呢? 可以这样理解:我 ...

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

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

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

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

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

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

随机推荐

  1. Java web学习总结

    javaweb学习总结(十四)——JSP原理 孤傲苍狼 2014-07-24 09:38 阅读:46603 评论:37     JavaWeb学习总结(十三)——使用Session防止表单重复提交 孤 ...

  2. 我给女朋友讲编程CSS系列(2)- CSS语法、3大选择器、选择器优先级

    首先看一下使用Css设置h1标签字体颜色和大小的例子,效果图如下: 新建一个网页test.html,然后复制粘贴下面的内容: <html> <head> <style t ...

  3. Google Optimize 安装使用教程

    Google Optimize 介绍 打开链接 https://optimize.google.com/optimize/signup/ 填入电邮地址后等待注册邀请 Google Optimize是什 ...

  4. hnust 聚宝盆

    问题 A: 聚宝盆 时间限制: 1 Sec  内存限制: 128 MB提交: 663  解决: 282[提交][状态][讨论版] 题目描述 Grace是个善良的同学,他经常帮助同学解决问题.这天,他正 ...

  5. 从输入url开始,完善前端体系架构

    原文链接: https://segmentfault.com/a/1190000013662126 从输入URL到页面加载的过程?如何由一道题完善自己的前端知识体系! javascript 前端 23 ...

  6. linq本质扩展方法+lambda表达式

    string[] names = { "aa","bb","cc","dd"}; /* IEnumerable<s ...

  7. 删除 node 【笔记】

    sudo npm uninstall npm -g sudo rm -rf /usr/local/lib/node /usr/local/lib/node_modules /var/db/receip ...

  8. File IO(NIO.2):路径类 和 路径操作

    路径类 Java SE 7版本中引入的Path类是java.nio.file包的主要入口点之一.如果您的应用程序使用文件I / O,您将需要了解此类的强大功能. 版本注意:如果您有使用java.io. ...

  9. 论文笔记(一)Re-ranking by Multi-feature Fusion with Diffusion for Image Retrieval

    0x00 预备知识 $\DeclareMathOperator{\vol}{vol}$ 无向图上的随机游走 无向图 $G=(V,E)$,边权函数 $w\colon V\times V \to R_+$ ...

  10. SYZOJ 186 [额]你猜是不是DP(哈希+二分答案+二分搜索)

      题目描述 现在给两个仅包含小写字母的字符串a,b ,求a 与b的最长公共连续子串的长度. 输入格式 两个字符串 输出格式 一个整数,为输入的两个字符串的最长公共连续子串的长度 测试样例 输入 qa ...