Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Snowleopard_wu
Java
提交
8841314c
J
Java
项目概览
Snowleopard_wu
/
Java
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
Java
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
8841314c
编写于
5月 24, 2019
作者:
A
Abhijay Kumar
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Added the code for Abstract factory pattern implementation and its unit test
上级
4456658f
变更
11
隐藏空白更改
内联
并排
Showing
11 changed file
with
175 addition
and
0 deletion
+175
-0
src/main/java/com/designpatterns/creational/abstractfactory/AbstractShapeFactory.java
...erns/creational/abstractfactory/AbstractShapeFactory.java
+23
-0
src/main/java/com/designpatterns/creational/abstractfactory/Circle.java
...com/designpatterns/creational/abstractfactory/Circle.java
+13
-0
src/main/java/com/designpatterns/creational/abstractfactory/FactoryProvider.java
...npatterns/creational/abstractfactory/FactoryProvider.java
+12
-0
src/main/java/com/designpatterns/creational/abstractfactory/FactoryType.java
...esignpatterns/creational/abstractfactory/FactoryType.java
+6
-0
src/main/java/com/designpatterns/creational/abstractfactory/Line.java
...a/com/designpatterns/creational/abstractfactory/Line.java
+13
-0
src/main/java/com/designpatterns/creational/abstractfactory/Shape.java
.../com/designpatterns/creational/abstractfactory/Shape.java
+18
-0
src/main/java/com/designpatterns/creational/abstractfactory/ShapeType.java
.../designpatterns/creational/abstractfactory/ShapeType.java
+7
-0
src/main/java/com/designpatterns/creational/abstractfactory/Sphere.java
...com/designpatterns/creational/abstractfactory/Sphere.java
+13
-0
src/main/java/com/designpatterns/creational/abstractfactory/ThreeDShapeFactory.java
...tterns/creational/abstractfactory/ThreeDShapeFactory.java
+11
-0
src/main/java/com/designpatterns/creational/abstractfactory/TwoDShapeFactory.java
...patterns/creational/abstractfactory/TwoDShapeFactory.java
+13
-0
src/test/java/com/designpatterns/creational/abstractfactory/AbstractShapeFactoryTest.java
.../creational/abstractfactory/AbstractShapeFactoryTest.java
+46
-0
未找到文件。
src/main/java/com/designpatterns/creational/abstractfactory/AbstractShapeFactory.java
0 → 100644
浏览文件 @
8841314c
package
src.main.java.com.designpatterns.creational.abstractfactory
;
/**
* The abstract factory pattern provides a way to encapsulate a group of individual factories that have a common theme
* without specifying their concrete classes. In normal usage, the client software creates a concrete implementation of
* the abstract factory and then uses the generic interface of the factory to create the concrete objects that are part
* of the theme. The client doesn't know (or care) which concrete objects it gets from each of these internal factories,
* since it uses only the generic interfaces of their products.
* <p>
* This pattern separates the details of implementation of a set of objects from their general usage and relies on
* object composition, as object creation is implemented in methods exposed in the factory interface.
*
* @see <a href="https://en.wikipedia.org/wiki/Abstract_factory_pattern">Abstract Factory Pattern</a>
*/
public
abstract
class
AbstractShapeFactory
{
/**
* Creates the appropriate shape object depending on the type of the shape
*
* @param name enum defining the name of the shape
* @return shape object
*/
public
abstract
Shape
getShape
(
ShapeType
name
);
}
src/main/java/com/designpatterns/creational/abstractfactory/Circle.java
0 → 100644
浏览文件 @
8841314c
package
src.main.java.com.designpatterns.creational.abstractfactory
;
public
class
Circle
implements
Shape
{
@Override
public
double
surfaceArea
(
float
radius
)
{
return
Math
.
PI
*
radius
*
radius
;
}
@Override
public
ShapeType
getShapeType
()
{
return
ShapeType
.
CIRCLE
;
}
}
src/main/java/com/designpatterns/creational/abstractfactory/FactoryProvider.java
0 → 100644
浏览文件 @
8841314c
package
src.main.java.com.designpatterns.creational.abstractfactory
;
public
class
FactoryProvider
{
public
static
AbstractShapeFactory
getShapeFactory
(
FactoryType
factoryType
)
{
if
(
FactoryType
.
TWO_D_FACTORY
==
factoryType
)
{
return
new
TwoDShapeFactory
();
}
else
if
(
FactoryType
.
THREE_D_FACTORY
==
factoryType
)
{
return
new
ThreeDShapeFactory
();
}
return
null
;
}
}
src/main/java/com/designpatterns/creational/abstractfactory/FactoryType.java
0 → 100644
浏览文件 @
8841314c
package
src.main.java.com.designpatterns.creational.abstractfactory
;
public
enum
FactoryType
{
TWO_D_FACTORY
,
THREE_D_FACTORY
}
src/main/java/com/designpatterns/creational/abstractfactory/Line.java
0 → 100644
浏览文件 @
8841314c
package
src.main.java.com.designpatterns.creational.abstractfactory
;
public
class
Line
implements
Shape
{
@Override
public
double
surfaceArea
(
float
radius
)
{
return
0
;
}
@Override
public
ShapeType
getShapeType
()
{
return
ShapeType
.
LINE
;
}
}
src/main/java/com/designpatterns/creational/abstractfactory/Shape.java
0 → 100644
浏览文件 @
8841314c
package
src.main.java.com.designpatterns.creational.abstractfactory
;
public
interface
Shape
{
/**
* calculates the surface area for the shape object
*
* @param radius the radius or length of shape whose area is to be calculated
* @return total surface area for the shape
*/
double
surfaceArea
(
float
radius
);
/**
* A property to identity the type of the shape for testing the pattern
*
* @return an enum describing the shape type
*/
ShapeType
getShapeType
();
}
src/main/java/com/designpatterns/creational/abstractfactory/ShapeType.java
0 → 100644
浏览文件 @
8841314c
package
src.main.java.com.designpatterns.creational.abstractfactory
;
public
enum
ShapeType
{
LINE
,
CIRCLE
,
SPHERE
}
src/main/java/com/designpatterns/creational/abstractfactory/Sphere.java
0 → 100644
浏览文件 @
8841314c
package
src.main.java.com.designpatterns.creational.abstractfactory
;
public
class
Sphere
implements
Shape
{
@Override
public
double
surfaceArea
(
float
radius
)
{
return
4
*
Math
.
PI
*
radius
*
radius
;
}
@Override
public
ShapeType
getShapeType
()
{
return
ShapeType
.
SPHERE
;
}
}
src/main/java/com/designpatterns/creational/abstractfactory/ThreeDShapeFactory.java
0 → 100644
浏览文件 @
8841314c
package
src.main.java.com.designpatterns.creational.abstractfactory
;
public
class
ThreeDShapeFactory
extends
AbstractShapeFactory
{
@Override
public
Shape
getShape
(
ShapeType
name
)
{
if
(
ShapeType
.
SPHERE
==
name
)
{
return
new
Sphere
();
}
return
null
;
}
}
src/main/java/com/designpatterns/creational/abstractfactory/TwoDShapeFactory.java
0 → 100644
浏览文件 @
8841314c
package
src.main.java.com.designpatterns.creational.abstractfactory
;
public
class
TwoDShapeFactory
extends
AbstractShapeFactory
{
@Override
public
Shape
getShape
(
ShapeType
name
)
{
if
(
ShapeType
.
LINE
==
name
)
{
return
new
Line
();
}
else
if
(
ShapeType
.
CIRCLE
==
name
)
{
return
new
Circle
();
}
return
null
;
}
}
src/test/java/com/designpatterns/creational/abstractfactory/AbstractShapeFactoryTest.java
0 → 100644
浏览文件 @
8841314c
package
src.test.java.com.designpatterns.creational.abstractfactory
;
import
org.junit.Assert
;
import
org.junit.Test
;
import
src.main.java.com.designpatterns.creational.abstractfactory.*
;
public
class
AbstractShapeFactoryTest
{
@Test
public
void
testAbstractShapeFactory
()
{
String
failReason
=
""
;
// Tests for 2-D shape factory
// Test for Line
AbstractShapeFactory
shapeFactory
=
FactoryProvider
.
getShapeFactory
(
FactoryType
.
TWO_D_FACTORY
);
Shape
shape
=
shapeFactory
.
getShape
(
ShapeType
.
LINE
);
if
(
shape
.
getShapeType
()
!=
ShapeType
.
LINE
)
{
failReason
+=
"Could not create an object for LINE.\n"
;
}
if
(
shape
.
surfaceArea
(
5
)
!=
0
)
{
failReason
+=
"Surface area of Line is incorrect!.\n"
;
}
// Test for circle
shape
=
shapeFactory
.
getShape
(
ShapeType
.
CIRCLE
);
if
(
shape
.
getShapeType
()
!=
ShapeType
.
CIRCLE
)
{
failReason
+=
"Could not create an object for CIRCLE.\n"
;
}
if
(
shape
.
surfaceArea
(
9
)
!=
254.46900494077323
)
{
failReason
+=
"Surface area of Circle is incorrect!.\n"
;
}
// Test for 3-D shape factory
// Test for Sphere
shapeFactory
=
FactoryProvider
.
getShapeFactory
(
FactoryType
.
THREE_D_FACTORY
);
shape
=
shapeFactory
.
getShape
(
ShapeType
.
SPHERE
);
if
(
shape
.
getShapeType
()
!=
ShapeType
.
SPHERE
)
{
failReason
+=
"Could not create and object for SPHERE.\n"
;
}
if
(
shape
.
surfaceArea
(
6
)
!=
452.3893421169302
)
{
failReason
+=
"Surface area of Sphere is incorrect!.\n"
;
}
Assert
.
assertEquals
(
failReason
,
""
,
failReason
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录