`

found AbstractFactory

阅读更多

抽象工厂

本章任务

1抽象工厂的定义

 

 抽象工厂::提供创建对象的接口.


2.实现水果族的扩展且符合开闭原则。

 

package com.aptech.found.factory;
/**
 * 
 * 文件名: Gardener.java
 * 版权: 方勇
 * 描述:园丁
 * Email:fangyong2006@163.com
 * 修改时间: 2010-7-10下午05:06:45
 */
public interface IGardener
{
    public IFruit createFruit(String name);

    public IVeggie createVeggie(String name);
}

 

package com.aptech.found.factory;

/**
 * 
 * 文件名: IFruit.java
 * 版权: 方勇
 * 描述:水果
 * Email:fangyong2006@163.com
 * 修改时间: 2010-7-10下午05:05:45
 */
public interface IFruit
{
}

 

package com.aptech.found.factory;

/**
 * 
 * 文件名: IVeggie.java
 * 版权: 方勇
 * 描述:蔬菜
 * Email:fangyong2006@163.com
 * 修改时间: 2010-7-10下午05:05:59
 */
public interface IVeggie
{
}

 

package com.aptech.found.factory;

/**
 * 
 * 文件名: NorthernGardener.java
 * 版权: 方勇
 * 描述:北方的园丁
 * Email:fangyong2006@163.com
 * 修改时间: 2010-7-10下午05:08:21
 */
public class NorthernGardener implements IGardener
{
    public IFruit createFruit(String name)
    {
        return new NorthernFruit(name);
    }

    public IVeggie createVeggie(String name)
    {
        return new NorthernVeggie(name);
    }

    /** @link dependency
     * @label Creates*/
    /*# NorthernVeggie lnkNorthernVeggie; */

    /** @link dependency
     * @label Creates*/
    /*# NorthernFruit lnkNorthernFruit; */
}

 

package com.aptech.found.factory;

/**
 * 
 * 文件名: NorthernFruit.java
 * 版权: 方勇
 * 描述:北方水果
 * Email:fangyong2006@163.com
 * 修改时间: 2010-7-10下午05:07:50
 */
public class NorthernFruit implements IFruit
{
    private String name;

    public NorthernFruit(String name)
    {
		this.name = name;
    }

    public String getName()
    {
		return name;
	}

    public void setName(String name)
    {
		this.name = name;
	}

}

 

 

 

 

package com.aptech.found.factory;

/**
 * 
 * 文件名: NorthernVeggie.java
 * 版权: 方勇
 * 描述:北方的蔬菜
 * Email:fangyong2006@163.com
 * 修改时间: 2010-7-10下午05:08:47
 */
public class NorthernVeggie implements IVeggie
{
    private String name;

    public NorthernVeggie(String name)
    {
    }

    public String getName()
    {
		return name;
	}

    public void setName(String name)
    {
		this.name = name;
	}

}

 

package com.aptech.found.factory;

/**
 * 
 * 文件名: TropicalGardener.java
 * 版权: 方勇
 * 描述:热带的园丁
 * Email:fangyong2006@163.com
 * 修改时间: 2010-7-10下午05:10:02
 */
public class TropicalGardener implements IGardener
{
    public IFruit createFruit(String name)
    {
        return new TropicalFruit(name);
    }

    public IVeggie createVeggie(String name)
    {
        return new TropicalVeggie(name);
    }

    /** @link dependency
     * @label Creates*/
    /*# TropicalVeggie lnkTropicalVeggie; */

    /** @link dependency
     * @label Creates*/
    /*# TropicalFruit lnkTropicalFruit; */
}

 

package com.aptech.found.factory;

/**
 * 
 * 文件名: TropicalFruit.java
 * 版权: 方勇
 * 描述:热带的水果
 * Email:fangyong2006@163.com
 * 修改时间: 2010-7-10下午05:09:31
 */
public class TropicalFruit implements IFruit
{
    private String name;

    public TropicalFruit(String name)
    {
		this.name = name;
    }

    public String getName()
    {
		return name;
	}

    public void setName(String name)
    {
		this.name = name;
	}

}

 

package com.aptech.found.factory;

/**
 * 
 * 文件名: TropicalVeggie.java
 * 版权: 方勇
 * 描述:热带的蔬菜
 * Email:fangyong2006@163.com
 * 修改时间: 2010-7-10下午05:10:23
 */
public class TropicalVeggie implements IVeggie
{
    private String name;

    public TropicalVeggie(String name)
    {
    }

    public String getName()
    {
		return name;
	}

    public void setName(String name)
    {
		this.name = name;
	}

}

 

package com.aptech.found.factory;

import junit.framework.TestCase;

public class AbstractFactoryTest extends TestCase {

	@Override
	protected void setUp() throws Exception {
		super.setUp();
	}

	public void testAbstractFactory() {

		// 实例化北方园丁
		IGardener northernGardener = new NorthernGardener();
		// 园丁种植了北方水果(苹果)
		NorthernFruit northernFruit = (NorthernFruit) northernGardener.createFruit("苹果");
		// 测试是否为北方苹果
		assertEquals("苹果", northernFruit.getName());

		/**
		 * 话剧场景
		 * 一年之后公司规模扩大了
		 * 公司来了位热带园丁
		 */
		
		// 实例化热带园丁
		IGardener tropicalGardener = new TropicalGardener();
		// 园丁种植了热带水果(榴莲)
		TropicalFruit tropicalFruit = (TropicalFruit) tropicalGardener.createFruit("榴莲");
		// 测试是否为北方苹果
		assertEquals("榴莲", tropicalFruit.getName());

	}
}

  

本章目标

1. 理解抽象工厂

分享到:
评论

相关推荐

    Ewebeditor License not found. Disabled.doc

    Ewebeditor 是一个功能强大的在线编辑器,但是有时用户可能会遇到 License not found. Disabled 的问题,今天我们将深入探讨这个问题的成因和解决方法。 首先,让我们了解 Ewebeditor 的 License 机制。Ewebeditor ...

    解决开机报mouse not found,keyboard not found

    标题 "解决开机报mouse not found,keyboard not found" 指出的问题是在计算机启动时,系统无法找到鼠标和键盘,导致出现错误提示。这通常与BIOS(基本输入输出系统)设置有关,因为BIOS是电脑启动时首先加载的软件,...

    launch failed binary not found(图文)手把手教你解决

    ### 解决“launch failed binary not found”的方法 在软件开发过程中,尤其是对于初学者而言,经常会遇到各种编译和运行时的问题。其中一个常见的错误就是“launch failed binary not found”。这篇文章将详细地...

    在虚拟机中启动系统后,出现Operating_System_not_found解决方法

    ### 在虚拟机中启动系统后,出现Operating_System_not_found解决方法 #### 一、引言 在使用虚拟机软件(如VMware)进行系统安装或测试时,有时会遇到“Operating System not found”这一错误提示,导致无法正常启动...

    ORACLE NO_DATA_FOUND的三种处理办法

    在Oracle数据库中,`NO_DATA_FOUND`异常是当你执行一个SQL查询时,没有找到匹配的记录时抛出的。这个异常通常与PL/SQL编程有关,因为SQL查询在PL/SQL块(如游标、存储过程或函数)中运行。在处理`NO_DATA_FOUND`异常...

    LTpowerPlanner not found的问题处理方法

    当你遇到"LTpowerPlanner not found"的问题时,这通常意味着系统无法找到或正确识别该程序,可能是由于安装不完整、文件丢失或版本不兼容等原因导致的。以下是一些详细的解决步骤和相关知识点: 1. **检查安装路径*...

    bashfdiskcommand not found 解决办法

    ### bash: fdisk: command not found 解决办法 在 Linux 系统中,用户经常会遇到命令执行失败的情况,其中一种常见的错误提示就是“command not found”。这类问题通常出现在尝试运行一个系统未找到路径的命令时。...

    编译时报 Looking for pthread_create - not found 的解决办法

    编译时报 Looking for pthread_create - not found 的解决办法 linux gcc 编译时报Looking for pthread_create - not found 其解决办法是...

    60多种 404 not found页面,带图片预览,下载直接用

    本资源包含60多种不同的404 Not Found页面设计,每一种都带有图片预览,让用户在下载前就能看到具体样式。这些设计采用HTML和CSS技术制作,HTML负责构建网页结构,而CSS则用于美化和布局,使页面呈现出丰富多彩的...

    init “No init found错误信息解析”1

    "init "No init found"错误信息解析" init 是 Android 系统启动过程中的一个关键组件,它负责加载系统的根文件系统、初始化系统服务、mount 文件系统等等。但是在 Android 系统启动过程中,有时会遇到 "No init ...

    windows下eclipse的“Lauch failed. Binary not found”问题解决方案.

    Binary not found”问题解决方案" 在 Windows 下使用 Eclipse 开发 C++ 项目时,可能会遇到 “Lauch failed. Binary not found” 的错误,这个问题的解决方案可以分为以下几个方面: 1. 项目设置:在 Eclipse 中...

    OSError: no library called "cairo" was found GTK++ windows 安装包

    OSError: no library called "cairo" was found no library called "libcairo-2" was found cannot load library 'libcairo.so.2': libcairo.so.2: cannot open shared object file: No such file or directory ...

    sqlite3:not found 解决方法

    标题中的“sqlite3:not found”是一个常见的错误提示,通常在Linux或类Unix系统中出现,意味着系统找不到sqlite3命令行工具。SQLite是一款轻量级的数据库管理系统,它被广泛应用于嵌入式设备、移动应用以及服务器端...

    解决 version `GLIBC_2.14' not found 解决方法.

    解决 version `GLIBC_2.14' not found 解决方法.具体方法可以参考一下。。

    No package 'orocos-bfl' found

    -- No package 'orocos-bfl' found CMake Error at /usr/share/cmake-3.5/Modules/FindPkgConfig.cmake:367 (message): A required package was not found Call Stack (most recent call first): /usr/share/cmake...

    linux下提示bash-command not found.docx

    Linux 中解决 "bash: command not found" 问题的方法 在 Linux 系统中,经常会遇到 "bash: command not found" 的错误提示,这是因为系统无法找到相应的命令所致。解决这个问题的关键就在于理解 Linux 系统中的 ...

    No compatible source was found for this video. 解决方法

    在本文中,我们将深入探讨“No compatible source was found for this video”这一常见错误,并提供解决方法,同时关注如何使用videojs播放RTMP流。 1. **RTMP协议**: RTMP是一种专为音频、视频数据传输而设计的...

    Configuration File Not Found(解决方案).md

    Configuration File Not Found(解决方案).md

    S7-200通讯 specified access point not found补丁

    标题中的"S7-200通讯 specified access point not found补丁"指的是在使用Siemens S7-200系列PLC(可编程逻辑控制器)进行通信时遇到的问题,即"指定的访问点未找到"。这通常是由于网络配置错误、硬件故障或者软件不...

    XMNT2002 NOT FOUND

    标题 "XMNT2002 NOT FOUND" 指出的是一个特定的程序或系统组件在用户尝试运行或查找时无法被找到的情况。这可能是由于多种原因,包括但不限于文件丢失、误删除、病毒感染或者软件安装不完整。让我们深入探讨这个问题...

Global site tag (gtag.js) - Google Analytics