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

(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. proget Android代码混淆

    混淆的时候,还要添加Android.jar,不然,你的程序一篇空白.我就吃了亏. 还有,activity是不能混淆的,因为AndroidMeaxinfast.xml里面会找他.

  2. 开源中国app说什么 旁边的那个图标是什么drawable

    妈的,那就只是一个 ActionBarDrawerToggle: 配合侧滑菜单而生的而已.

  3. Linux档案与文件系统的压缩与打包

    总结: 压缩指令为透过一些运算方法去将原本的档案进行压缩,以减少档案所占用的磁盘容量.压缩前与压缩后的档案所占用的磁盘容量比值,就可以被称为是“压缩比” 压缩的好处是可以减少磁盘容量的浪费,在www网 ...

  4. mysql sum聚合函数和if()函授的联合使用

    今天去面试遇到一个数据库试题,首先说一下表结构如下: 表结构:mytest 表数据:mytest 要查询的结果如下: 在本题目中,需要用到sum聚合函数和if函数 sql如下: ,)) ,)) AS ...

  5. loj2090 「ZJOI2016」旅行者

    分治+最短路,很套路的 #include <algorithm> #include <iostream> #include <cstring> #include & ...

  6. Android输入法弹出时覆盖输入框问题

    本文来自网易云社区 作者:孙有军 当一个activity中含有输入框时,我们点击输入框,会弹出输入法界面,整个界面的变化效果与manifest中对应设置的android:windowSoftInput ...

  7. socketCluster 使用

    <html> <head> <title>test</title> <script src="https://cdn.bootcss.c ...

  8. 谋哥:App推广最有效的是自推广

    [谋哥每天一原创,第一百五十二篇] 目前市场上,各类App已经覆盖到所有你能想到的领域,并且各个山头也被占得差不多了,网上 的说法就是布局已经完成.如果你想现在再插那么一杠子进去,就得看你的真本事了, ...

  9. WCF,WebServices,WebApi区别

    http://www.cnblogs.com/hetring/p/4493137.html

  10. 【Word Search】cpp

    题目: Given a 2D board and a word, find if the word exists in the grid. The word can be constructed fr ...