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. ButterKnife 注解

    简介 官网:http://jakewharton.github.io/butterknife/ github:https://github.com/JakeWharton/butterknife 依赖 ...

  2. 关于C#编程中引用与值类型赋值的一些容易犯错的地方

    值类型与引用类型的区别在于:值类型在赋值的时候是拷贝值,引用类型在赋值的时候的拷贝引用.记住这一个原则,我们再来分析一些具体情况: PointStruct pt1 = ,); PointStruct ...

  3. WebService CXF调试常见报错及解决方案

    1.CXF java.lang.RuntimeException: Cannot create a secure XMLInputFactory 解决方案:从apache-cxf/lib下寻找Wood ...

  4. Hibernate 一对多单向关联Demo

    以Classes[班级]和Student[学生]为例的Demo Classes .java public class Classes implements Serializable { private ...

  5. thinkphp对文件的上传,删除,下载操作

    工作需要,整理一下最近对php的学习经验,希望能对自己有帮助或者能帮助那些需要帮助的人. thinkphp对文件的操作,相对来说比较简单,因为tp封装好了一个上传类Upload.class.php 废 ...

  6. PHP PDO获取结果集

    一.介绍PDO获取结果集,不得不介绍一下PDO是如果执行SQL语句,一般情况下分三种, 1.query()方法 query()方法通常用于返回执行查询后的结果集.语法是这样的:PDOStatement ...

  7. weka打开提示内存不足的解决方法

    今天在linux中打开Weka时,打开基因数据文件的时候出现如 Not enough memory . Please load a smaller dataset or use a larger he ...

  8. 【USACO 1.1.4】破碎的项链

    [题目描述] 你有一条由N个红色的,白色的,或蓝色的珠子组成的项链(3<=N<=350),珠子是随意安排的.这里是 n=29 的二个例子:                 1 2      ...

  9. MySQL Server 5.6 解压版安装配置

    MySQL解压版下载地址为: http://dev.mysql.com/downloads/mysql/5.6.html#downloads 安装及配置步骤: ①将MySQL的zip包解压到路径C:\ ...

  10. 使用xshell出现乱码

    用xshell链接Linux出现乱码: 解决方法: 先查看Linux支持的字符类型是否为如下类型 如果是,则找到菜单中的文件选项,并在选项中找到属性: 单击属性选项,找到终端,将编码设置为UTF-8: ...