Factory Pattern , 即工厂模式,用于创建对象的场景,属于创建类的设计模式 。

下面是一个工厂模式案例。 Shape 作为接口, Circle, Square, Rectangle 作为具体类实现了 Shape 接口。 ShapeFactory 封装了创建各个 Shape 的方式,隐藏了 new 命令。FactoryPatternDemo 用于演示工厂模式。

具体代码:

Shape 接口定义

public interface Shape {

    public void draw();
}

Circle / Rectangle / Square 三个具体类的实现,实现 Shape 接口

public class Circle implements Shape {

    @Override
public void draw() {
System.out.println("Circle - draw");
}
}
public class Rectangle implements Shape {

    @Override
public void draw() { System.out.println("Rectangle - draw");
}
}
public class Square implements Shape{

    @Override
public void draw() {
System.out.println("Square - draw");
}
}

ShapeFactory 工厂类,根据传入的参数,即Shape 的具体名称,来创建返回对象

public class ShapeFactory {

    public static Shape getShape(String shapeName){
Shape shape = null;
if ("Circle".equals(shapeName)){
shape = new Circle();
}
else if ("Rectangle".equals(shapeName)){
shape = new Rectangle();
}
else if ("Square".equals(shapeName)){
shape = new Square();
} return shape;
}
}

使用演示

public class FactoryPatternDemo {

    public static void main(){
Shape circle = ShapeFactory.getShape("Circle");
circle.draw(); Shape rectangle = ShapeFactory.getShape("Rectangle");
rectangle.draw(); Shape square = ShapeFactory.getShape("Square");
square.draw();
}
}

个人理解

本案例的优点有:

1. FactoryPatternDemo 作为工厂模式的使用方,使用 Shape 接口来声明变量,避免和具体实现耦合,这是针对接口编程的体现。

2. Shape 对象的创建(new) 都被封装在 ShapeFactory 里面,FactoryPatternDemo 无需使用 new 命令即可获得新对象。这有利于后期拓展维护。

拓展时,涉及的变动文件:

例如,在系统中需要增加一个三角形对象 triangle 。

1. 增加一个文件,实现 Trianlge 类, 使其实现 Shape 接口,实现 draw() 方法

2. 在 ShapeFactory::getShape() 方法中增加支持 Triangle 的调用。

这样调用方即可使用新增的 Triangle 对象。

参考资料

Design Pattern - Factory Pattern

[Design Pattern] Factory Pattern 简单案例的更多相关文章

  1. [Design Pattern] Facde Pattern 简单案例

    Facade Pattern, 即外观模式,用于隐藏复杂的系统内部逻辑,提供简洁的接口给客户端调用,属于结构类的设计模式.我会将其名字理解为,门户模式. 下面是 Facade Pattern 的一个简 ...

  2. [Design Pattern] Front Controller Pattern 简单案例

    Front Controller Pattern, 即前端控制器模式,用于集中化用户请求,使得所有请求都经过同一个前端控制器处理,处理内容有身份验证.权限验证.记录和追踪请求等,处理后再交由分发器把请 ...

  3. [Design Pattern] Observer Pattern 简单案例

    Observer Pattern,即观察者模式,当存在一对多关系,例如一个对象一有变动,就要自动通知被依赖的全部对象得场景,属于行为类的设计模式. 下面是一个观察者模式的简单案例. Observer ...

  4. [Design Pattern] Mediator Pattern 简单案例

    Meditor Pattern,即调解模式,用一个调解类类处理所有的沟通事件,使得降低多对象之间的沟通难度,属于行为类的设计模式.为了方便理解记忆,我也称其为,沟通模式. 下面是一个调解模式的简单案例 ...

  5. [Design Pattern] Iterator Pattern 简单案例

    Iterator Pattern,即迭代时模式,按照顺序依次遍历集合内的每一个元素,而不用了解集合的底层实现,属于行为类的设计模式.为了方便理解记忆,我也会称其为遍历模式. 下面是一个迭代器模式的简单 ...

  6. [Design Pattern] Command Pattern 简单案例

    Command Pattern, 即命令模式,把一个命令包裹在一个对象里面,将命令对象传递给命令的执行方,属于行为类的设计模式 下面是命令模式的一个简单案例. Stock 代表被操作的对象.Order ...

  7. [Design Pattern] Proxy Pattern 简单案例

    Proxy Pattern, 即代理模式,用一个类代表另一个类的功能,用于隐藏.解耦真正提供功能的类,属于结构类的设计模式. 下面是 代理模式的一个简单案例. Image 定义接口,RealImage ...

  8. [Design Pattern] Flywight Pattern 简单案例

    Flywight Pattern, 即享元模式,用于减少对象的创建,降低内存的占用,属于结构类的设计模式.根据名字,我也将其会理解为 轻量模式. 下面是享元模式的一个简单案例. 享元模式,主要是重用已 ...

  9. [Design Pattern] Filter Pattern 简单案例

    Filter Pattern,即过滤模式,通过不同的过滤标准,或者低耦合将过滤标准组合在一起,对一组对象进行过滤,属于结构类的设计模式. 下面是一个过滤模式的简单案例. Criteria 定义过滤接口 ...

随机推荐

  1. Java基础知识强化之IO流笔记14:递归之输出指定目录下所有java文件绝对路径的案例

    1. 需求:输出指定目录下的所以.java结尾文件的绝对路径的案例:  分析:  A:封装目录  B:获取该目录下的所有文件和文件夹的File数组  C:遍历这个File数组,得到每一个File对象的 ...

  2. 有向图的欧拉路径POJ2337

    每个单词可以看做一条边,每个字母就是顶点. 有向图欧拉回路的判定,首先判断入度和出度,其实这个题判定的是欧拉通路,不一定非得构成环,所以可以有一个点的顶点入度比出度大1,另外一个点的出度比入度大1,或 ...

  3. JY03-HTML/CSS-京东02

    ---恢复内容开始--- 1. position:absolute 1.1 绝对定位设置定位值为百分比时: 如设置right:50%,即元素右侧外边框距离父盒子右侧始终始终为父盒子宽度的一半. 可以使 ...

  4. Tempdb对SQL Server性能的影响

    转载文章,原文地址:http://www.cnblogs.com/laodao1/archive/2010/04/15/1712395.html1.SQL Server系统数据库介绍 SQL Serv ...

  5. JavaScript_ECMA5数组新特性

    var arr = [ 1, 2, 3, 4, 5, 4, 3, 2, 1 ]; 新加位置的方法: indexOf lastIndexOf1.1个参数的时候表示传值 返回索引位置(index从0开始) ...

  6. 【COGS1672】难存的情缘

    [题目描述] 一天机房的夜晚,无数人在MC里奋斗着... 大家都知道矿产对于MC来说是多么的重要,但由于矿越挖越少,勇士们不得不跑到更远的地方挖矿,但这样路途上就会花费相当大的时间,导致挖矿效率底下. ...

  7. underscorejs-map学习

    2.2 map 2.2.1 语法: _.map(list, iteratee, [context]) 2.2.2 说明: 对集合的每个成员依次进行某种操作,将返回的值依次存入一个新的数组.接收3个参数 ...

  8. jQuery中的阻止默认行为

    在很多元素中都存在默认行为,例如表单中的submit按钮,a标签等等.如果想要消除其中的默认行为,就需要一个事件event的方法来消除他们的默认行为. 这个方法就是event.preventDefau ...

  9. 谈.Net委托与线程——解决窗体假死

    转自:http://www.cnblogs.com/smartls/archive/2011/04/08/2008981.html#2457370   引言 在之前的<创建无阻塞的异步调用> ...

  10. 广东移动NGBOSS系统话费查询

    基于很多客户的需要 现承接广东移动NGBOSS华为系统的各项功能开发 承接广东深圳.佛山.东莞.广州.惠州.汕头.湛江移动NGBOSS的全球通开户,批量话费查询.缴费,号码导出等功能开发. 有需要者联 ...