设计模式(2)----简单工厂模式

  1. 说明一下:

    1. 简单工厂模式不属于23种GOF设计模式之一,我之所以写出来,是应为简单工厂模式是工厂模式的基础,23种中的工厂方法模式是从中衍生的。
  2. 简介:

    1. 简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。
  3. 简单工厂UML图:

  4. 组成:

    1. 简单工厂模式由三部分组成,具体工厂,具体产品,抽象产品。

      1. 工厂类:简单工厂的核心,
      2. 抽象产品:简单工厂模式所创建的对象的父类或者它们共同拥有的接口
      3. 具体产品:简单工厂模式所创建的任何对象都是这个角色的实现类
  5. 模拟场景:

    1. 一个生产汽车的工厂,现在要根据客户的需求来生产汽车,用简单工厂模式来实现
  6. 实现步骤:

    1. 创建抽象产品类,定义具体产品的公共接口

package com.lvsling.simplefactory;

/**

* 抽象产品角色

* @author Administrator

*

*/

public
abstract
class Car {

}

  1. 创建具体产品类,定义生产的具体产品

package com.lvsling.simplefactory;

/**

* 具体产品角色:CarA

* @author Administrator

*

*/

public
class CarA extends Car{

public CarA() {

System.out.println("生产了一辆A型汽车!");

}

}


package com.lvsling.simplefactory;

/**

* 具体产品角色:CarB

* @author Administrator

*

*/

public
class CarB extends Car{

public CarB() {

System.out.println("生产了一辆B型汽车!");

}

}

  1. 创建工厂类,通过创建静态方法从而根据传入不同参数创建不同具体产品类的实例

package com.lvsling.simplefactory;

/**

* 简单工厂类

* @author Administrator

*

*/

public
class SimpleFactory {

public SimpleFactory() {

System.out.println("工厂已创建!");

}

/**

* 根据客户指定的类型carType,生产相应的车型车Car

*

* @param carType 车类型

* @return
生产好的车

*/

public
static Car produceCar(String carType) {

Car car = null;

switch (carType) {

case
"A":

car = new CarA();

break;

case
"B":

car = new CarB();

break;

default:

break;

}

return car;

}

}

  1. 创建一个client来调用工厂类的静态方法,传入不同的参数创建不同的具体产品类的实例

package com.lvsling.simplefactory;

public
class Client {

public
static
void main(String[] args) {

SimpleFactory simpleFactory = new SimpleFactory();     // 创建工厂

Car car_A = simpleFactory.produceCar("A");             // 生产A型车

Car car_B = simpleFactory.produceCar("B");             // 生产B型车

}

}

  1. 控制台打印结果

工厂已创建!

生产了一辆A型汽车!

生产了一辆B型汽车!

  1. 优点:

    1. 将创建实例的工作与使用实例的工作分开,使用者不必关心类对象如何创建,实现了解耦;
    2. 把初始化实例时的工作放到工厂里进行,使代码更容易维护。 更符合面向对象的原则
  2. 模式缺点:

    1. 使用简单工厂模式将会增加系统中类的个数,在一定程序上增加了系统的复杂度和理解难度。
    2. 系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,在产品类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的扩展和维护。所以说从工厂的角度来说简单工厂模式是不符合"开-闭"原则的。
    3. 简单工厂模式由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构。
  3. 适用场景:

    1. 工厂类负责创建的对象比较少:由于创建的对象较少,不会造成工厂方法中的业务逻辑太过复杂。
    2. 客户端只知道传入工厂类的参数,对于如何创建对象不关心:客户端既不需要关心创建细节,甚至连类名都不需要记住,只需要知道类型所对应的参数。
  4. 总结:

    1. 简单工厂模式虽然不属于23种GOF设计模式,但是它是工厂模式的基础,在了解简单工厂模式后,才能更深入的学习工厂方法模式。

原文地址:https://www.cnblogs.com/lvsling/p/8467851.html

时间: 2024-10-17 02:21:57

设计模式(2)----简单工厂模式的相关文章

【设计模式】简单工厂模式

以面向对象的思想和简单工厂模式,写一个C++计算器程序,代码如下: #include <iostream> using namespace std; class Operation { public: Operation(double left, double right) { lhs = left; rhs = right; } const double GetLeft() const { return lhs; } const double GetRight() const { retur

设计模式之简单工厂模式

设计模式之简单工厂模式 动机:         不暴露实例化逻辑来创建对象.通过公共的接口创建新的对象.         这是一个简单的实现,客户端需要一个product,但是client不直接使用new对象,而是通过提供需要的对象信息来找factory得到新的product.         这个factory实例化一个具体的product并返回(转化成抽象的类),client段使用这个抽象的类而不用考虑它具体的实现. 应用举例:        也许工厂模式是使用最多的模式之一.举个例子,一个

设计模式初探—简单工厂模式

为什么要学习设计模式? 可重用.可维护.可扩展.灵活性好 什么是简单工厂模式? 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现. 简单工厂模式的好处? (1)将具体业务和实现进行分离 (2)将多个具体业务之间进行解耦 解决的问题? 单独的类来创造

【幻化万千戏红尘】qianfengDay10-java基础学习:成员内部类、静态内部类、局部和匿名内部类,设计模式之简单工厂模式

课程回顾: 接口:1.属性:public\static\final2.方法:public\abstract 多态:1.静态化(编译时)多态重载2.动态化(运行时)多态重写对象转型 1.向上转型 2.向下转型 今日内容:内部类:定义在类的内部的类1.成员内部类格式:[修饰符] class 类名 { }内部不能有静态的属性和方法,可以访问外部类的属性,也可以调用外部类的方法 在静态方法中的使用格式:外部类 外对象=new 外部类();成员内部类 对象名=外对象.new 成员内部类(); 2.静态内部

iOS设计模式 - (3)简单工厂模式

iOS设计模式 - (3)简单工厂模式           by Colin丶 转载请注明出处:              http://blog.csdn.net/hitwhylz/article/details/40381721 一.简述 简单工厂模式(FACTORY),通过面向对象的封装,继承和多态来降低程序的耦合度.将一个具体类的实例化交给一个静态工厂方法来执行. 该模式中的角色包括: 工厂类(Simple Factory): 只包含了创建具体类的静态方法. 抽象产品(Product):

大话设计模式_简单工厂模式(Java代码)

简单的描述:一个父类.多个子类,实例化那个子类由一个单独的工厂类来进行 图片摘自大话设计模式: 运算类: 1 package com.longsheng.simpleFactory; 2 3 public class Calculate { 4 5 private double firstNum; 6 private double secondNum; 7 8 public double getFirstNum() { 9 return firstNum; 10 } 11 12 public v

设计模式初探——简单工厂模式

学习设计模式已经有一段时间了,<大话>也正看第二遍,可是却迟迟不敢下笔.算了,先拿简单的开刀吧. 简单工厂模式是设计模式中一种比较简单.基础的设计模式. 定义: 由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例. 包含元素: 工厂(Creator)角色 简单工厂模式的核心,它负责实现创建所有实例的内部逻辑.工厂类可以被外界直接调用,创建所需的产品对象. 抽象产品(Product)角色 简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的

01.设计模式_简单工厂模式

转载自  http://www.cnblogs.com/zhili/p/SimpleFactory.html 一.引言 这个系列也是自己对设计模式的一些学习笔记,希望对一些初学设计模式的人有所帮助的,在上一个专题中介绍了单例模式,在这个专题中继续为大家介绍一个比较容易理解的模式--简单工厂模式. 二.简单工厂模式的介绍 说到简单工厂,自然的第一个疑问当然就是什么是简单工厂模式了? 在现实生活中工厂是负责生产产品的,同样在设计模式中,简单工厂模式我们也可以理解为负责生产对象的一个类, 我们平常编程

设计模式之简单工厂模式(Simply Factory)摘录

从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现. 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例. 该模式中包含的角色及其职责:(1).工厂(Creator)角色:简单工厂模式的

C#设计模式(2)——简单工厂模式

一.引言 这个系列也是自己对设计模式的一些学习笔记,希望对一些初学设计模式的人有所帮助的,在上一个专题中介绍了单例模式,在这个专题中继续为大家介绍一个比较容易理解的模式——简单工厂模式. 二.简单工厂模式的介绍 说到简单工厂,自然的第一个疑问当然就是什么是简单工厂模式了? 在现实生活中工厂是负责生产产品的,同样在设计模式中,简单工厂模式我们也可以理解为负责生产对象的一个类, 我们平常编程中,当使用”new”关键字创建一个对象时,此时该类就依赖与这个对象,也就是他们之间的耦合度高,当需求变化时,我