设计模式——简单工厂模式
2015-10-10 01:36
489 查看
一、什么是简单工厂模式
简单工厂模式也称为静态工厂模式,是一种创建型模式,就是告诉人们怎么去“new”的。简单工厂模式通过一个简单的工厂来实现对象的创建。
二、UML图
三、模式原型代码
/** * 需要生产的产品抽象类 */ public abstract class AbstractProduct { /** * 产品类的抽象行为 */ public abstract void Action(); } /** * 具体产品类1,继承自抽象产品类 */ public class ConcreteProduct1 extends AbstractProduct{ /** * 重载的具体产品动作 */ @Override public void Action() { System.out.println("This is the action of ConcreteProduct1."); } } /** * 具体产品类2,同样继承自抽象产品类 */ public class ConcreteProduct2 extends AbstractProduct{ /** * 重载的具体产品2的行为方法 */ @Override public void Action() { System.out.println("This is the action of ConcreteProduct2."); } } /** * 产品工厂方法,包含一个抽象产品对象,职责是通过传入不同的参数来生产不同的具体产品 */ public class ProductFactory { public static AbstractProduct createProduct(String str){ AbstractProduct product = null; //--- 根据不同的参数生产不同的产品对象 switch (str) { case "ConcreteProduct1": product = new ConcreteProduct1(); break; case "ConcreteProduct2": product = new ConcreteProduct2(); break; } return product; } } /** * 客户端类,用于测试 */ public class Client { public static void main(String[] args) { //--- 通过产品工厂生产具体的产品类 AbstractProduct product1 = ProductFactory.createProduct("ConcreteProduct1"); AbstractProduct product2 = ProductFactory.createProduct("ConcreteProduct2"); //--- 验证多态性 product1.Action(); product2.Action(); } }
四、一个例子
说明:该实例场景如下: 现在一个数学老师需要为学生讲解各种几何图形,每个几何图形都有自己对自己的描述,老师希望通过输入不同的名称,程序可以自动显示出该几何图形的描述
/** * 图形抽象类 */ public abstract class Shape { /** * 几何图形的名称 */ private String name; /** * 构造方法,传入几何图形名称 */ public Shape(String name){ this.name = name; } /** * 名称getter */ public String getName() { return name; } /** * 名称setter */ public void setName(String name) { this.name = name; } /** * 图形描述方法 */ public abstract void description(); } /** * 三角形类,继承自图形类 */ public class Triangle extends Shape{ public Triangle(String name){ super(name); } /** * 三角形的描述 */ @Override public void description() { System.out.println("我是三角形类,我有如下特点:"); System.out.println(" 1.有三条边"); System.out.println(" 2.两边之和大于第三边,两边只差小于第三边"); System.out.println(" 3.面积是底乘高除2"); System.out.println(" ..."); } } /** * 矩形类 */ public class Retangle extends Shape{ /** * 矩形类构造函数,传入名字 */ public Retangle(String name){ super(name); } /** * 矩形类描述 */ @Override public void description() { System.out.println("我是矩形类,我有如下特性:"); System.out.println(" 1.我有四条边"); System.out.println(" 2.四条边两两相等"); System.out.println(" 3.面积是长乘宽"); System.out.println(" ..."); } } /** * 正方形类 */ public class Square extends Shape{ /** * 正方形构造方法,传入名称 */ public Square(String name){ super(name); } /** * 正方形描述函数 */ @Override public void description() { System.out.println("我是正方形类,我有如下特性:"); System.out.println(" 1.我有四条边"); System.out.println(" 2.四条边都相等"); System.out.println(" 3.面积是边长的平方"); System.out.println(" ..."); } } /** * 图形类工厂,用于生产各种图形对象 */ public class ShapeFactory { public static Shape createShape(String name) { Shape shape = null; switch (name) { case "正方形": shape = new Square(name); break; case "矩形": shape = new Retangle(name); break; case "三角形": shape = new Triangle(name); break; default: System.out.println("图形输入错误,程序结束。"); System.exit(1); } return shape; } } import java.util.Scanner; /** * 客户端类,用于测试 */ public class Client { public static void main(String[] args) { String name = null; Scanner input = new Scanner(System.in); Shape shape = null; System.out.println("请输入图形名称:"); name = input.nextLine(); shape = ShapeFactory.createShape(name); shape.description(); input.close(); } }
五、简单工厂模式的优缺点
优点:初步降低了创建相似对象的耦合性(将客户端和产品类解耦),由于客户端和产品类的耦合性减低,使得在修改产品类的时候不需要修改客户端,该模式体现了面向对象设计的思想——可复用、易维护、灵活度高等特点,同时也是面向接口编程思想的一种体现。 缺点:违反了开放——封闭原则。开放封闭原则即:程序对已扩展应该是开放的,对于修改应该是封闭的。通俗来说,就是只能增加新的代码,而不能修改原来已有的代码。违反这一原则的点在于产品类和工厂类的耦合,导致新增产品类的同时必须要向工厂类的switch内加入一条分支。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树