JAVA中工厂设计模式的uml图_Java设计模式之简单工厂

简单工厂 定义: 提供一个创建对象实例的功能,而无须关心具体的实现。被创建实例的类型可以是接口、抽象类,也可以是具体的类。 结构说明:   结构说明: Client:客户端,通过Factory去获取Api接口对象,然后面向Api接口编程。 Api:定义客户端所需要的功能

一、什么是简单工厂模式?

简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式。通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类,一般都是实现一个接口,而这个接口又被这个工厂所依赖。

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

1.工厂(Factory)角色 简单工厂模式的核心,它负责实现创建所有实例。工厂类可以被外界直接调用,创建所需的产品对象,里面的方法一般被声明为静态的。

2.抽象(Interface)角色 简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。

3.产品(Instance)角色 简单工厂模式所创建的具体实例对象

三、简单工厂模式的优缺点?

在这个模式中,简单工厂模式     ①抽象基类:类中定义抽象一些方法,用以在子类中实现     ②继承自抽象基类的子类:实现基类中的抽象方法     ③工厂类:用以实例化所有相对应的子类   /** * * 定义个抽象的类,让子类去继承实现它 * */ abstr工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。用户在使用时可以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何创建以及如何组织的。有利于整个软件体系结构的优化。

不难发现,简单工厂模式的缺点也正体现在其工厂类上,由于工厂类集中了所有实例的创建逻辑,所以“高内聚”方面做的并不好。另外,当系统中的具体产品类不断增多时,可能会出现要求工厂类也要做相应的修改,扩展性并不很好。

下面给出一个例子。

UML图:

090d24ad80edfe7c934e4fdca9a8f7fa.png

抽象产品:

package com.fit.model.simplefactory;

/***********************************************************************

* Module: Fruit.java

* Author: Administrator

* Purpose: Defines the Interface Fruit

***********************************************************************/

/**

* administrator

*

* @pdOid 0dd5af50-92ad-43fc-8d59-b5a781d3073e

*/

public interface Fruit {

/** @pdOid a059f30b-1f0b-47dd-9117-db5037174c98 */

static final int age = 0;

/** @pdOid a2a57592-b8e1-46f5-9a27-24f002f501eb */

void growth();

/** @pdOid 3044454a-da2d-4f8f-a66e-f674f61a3ff3 */

void plant();

/** @pdOid 8fd74b01-62fa-416f-a2b4-915c0c37f73a */

void harvest();

}

具体产品:

package com.fit.model.simplefactory;

/***********************************************************************

* Module: Apple.java

* Author: Administrator

* Purpose: Defines the Class Apple

***********************************************************************/

/** @pdOid df35b5a7-6f12-4e67-8f49-002b1660d7f6 */

public class Apple implements Fruit {

/** @pdOid 1acc35df-64cb-443a-8534-3a138a8b6b01 */

public void growth() {

// TODO: implement

}

/** @pdOid 0ce1b92d-7e41-4369-b40c-ff0c7f543804 */

public void plant() {

System.out.println("种植了苹果");

}

/** @pdOid 71859bed-06ac-42a3-be38-fed55fb3ba30 */

public void harvest() {

// TODO: implement

}

}

package com.fit.model.simplefactory;

/***********************************************************************

* Module: Grape.java

* Author: Administrator

* Purpose: Defines the Class Grape

***********************************************************************/

/** @pdOid 718691b3-49d8-4718-b1ea-c02011d384d8 */

public class Grape implements Fruit {

/** @pdOid a32cc7f8-cd73-448e-8bff-73df08284d6b */

public void growth() {

// TODO: implement

}

/** @pdOid b0e4ec6a-04d1-4631-bfca-5ccd67339dfe */

public void plant() {

System.out.println("种植了葡萄");

}

/** @pdOid 7090e13b-44fb-4108-b9f2-74c0f3262134 */

public void harvest() {

// TODO: implement

}

}

package com.fit.model.simplefactory;

/***********************************************************************

* Module: Strawberry.java

* Author: Administrator

* Purpose: Defines the Class Strawberry

***********************************************************************/

/** @pdOid 2348636e-d5df-4a4a-b523-67eaa5159150 */

public class Strawberry implements Fruit {

/** @pdOid a1a041d5-5833-477b-91b5-37b2853792ba */

public void growth() {

// TODO: implement

}

/** @pdOid c929e663-87d0-4745-9db4-0f98e0d58835 */

public void plant() {

System.out.println("种植了草莓");

}

/** @pdOid a36d0d37-143f-4b4d-a448-85e82cf28cac */

public void harvest() {

// TODO: implement

}

}

工厂类:

package com.fit.model.simplefactory;

/***********************************************************************

* Module: FruitGardener.java

* Author: Administrator

* Purpose: Defines the Class FruitGardener

***********************************************************************/

/** @pdOid 1fd473d0-7e79-421c-a0af-349352a87eec */

public class FruitGardener {

/** @pdOid cedf9c41-0110-4e9e-be8f-e41d5af8a543 */

public static Fruit createFruit(int fruitType) {

if (Constant.APPLE == fruitType) {

return new Apple();

} else if (Constant.GRAPE == fruitType) {

return new Grape();

} else if (Constant.STRAWBERRY == fruitType) {

return new Strawberry();

} else {

return null;

}

}

}

常量类:

package com.fit.model.simplefactory;

public final class Constant {

public static final int APPLE = 1;

public static final int STRAWBERRY = 2;

public static final int GRAPE = 3;

}

测试类:

package com.fit.model.simplefactory;

public class Test {

/**

* @param args

*/

public static void main(String[] args) {

Fruit apple = FruitGardener.createFruit(1);

Fruit strawberry = FruitGardener.createFruit(2);

Fruit grape = FruitGardener.createFruit(3);

apple.plant();

strawberry.plant();

grape.plant();

}

}

运行结果:

种植了苹果

种植了草莓

种植了葡萄

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值