设计模式第一篇 工厂模式(1) 简单工厂模式simple factory

本文深入解析了简单工厂模式(simple factory)的概念与实现方式,并通过园丁种植水果的例子进行了详细说明。介绍了简单工厂模式的一般性结构、抽象产品角色的省略、工厂角色与抽象产品角色合并等概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工厂模式专门负责将拥有共同接口的类实例化。工厂模式可以动态的决定需要实例化哪个具体类,不必事先知道每次实例化哪个类!

工厂模式主要有三种形态:

1、简单工厂模式 simple factory : (又称静态工厂方法模式)

2、工厂方法模式 factory method : (又称多态性工厂模式)

3、抽象工厂模式 abstract factory : (又称工具箱模式)

本文将介绍第一种 简单工厂模式 的使用规则以及优缺点

(一) 首先我们先看一下simple factory 一般性结构图:

简单工厂模式就是工厂根据传入的参数决定创建出哪种具体的产品。

我们以园丁种植水果为例子具体剖析下simple factory :

"园丁根据客户的要求,种植不同的水果" ,代码如下:

public interface Fruit { /** * 种植 */ public void plant(); }

public class Apple implements Fruit { public Apple(){ System.out.println("Apple is produced..."); } @Override public void plant() { System.out.println("Apple is plant..."); } private int treeAge ; public int getTreeAge() { return treeAge; } public void setTreeAge(int treeAge) { this.treeAge = treeAge; } }

public class Grape implements Fruit { public Grape(){ System.out.println("Grape is produced..."); } @Override public void plant() { System.out.println("Grape is plant..."); } }


public class SimpleFactory { /** * 根据客户的指令生产某一种产品 * @param fruitName * @return */ public static Fruit getFruit(String fruitName){ if(fruitName.equals("apple")){ return new Apple(); } else if(fruitName.equals("grape")){ return new Grape(); } else{ System.out.println("没有这种水果..."); return null ; } } public static void main(String[] args) { //客户向工厂提供某种产品的生产指令,此时客户不需要关心产品到底是怎么生产出来的,全部交由工厂负责创建 Fruit fruit = getFruit("apple"); fruit.plant(); } }


(二) 抽象产品角色的省略

结构图如下


当系统只有一种具体产品角色时,就可以省略掉抽象产品角色

工厂类:public class Creator{ //生产具体的产品 public static ConcreteProduct getProduct(){ return new ConcreteProduct (); } }

具体产品类:

public class ConcreteProduct { public ConcreteProduct (){} }

(三)工厂角色与抽象产品角色合并

抽象产品角色作为具体产品的工厂,可以创建出各种具体产品,最典型的例子就是JAVA Api中 DataFormat ,它是一个抽象类,提供了很多的静态方法,如getDateInstance()返回一个具体的时间类如SimpleDateFormat,getDateInstance()做了两件事情:(1)运用多态性,因为SimpleDateFormat是DataFormat的一个子类 (2)使用静态工厂方法,内部调用子类SimpleDateFormat的构造器

(四)简单工厂模式的优缺点

优点:模式的核心是工厂类,这个类必须含有必要的判断逻辑,以达到创建哪一种具体产品的目的。消费者不需要负责产品的创建,只需要负责消费产品。simple factory通过这种做法实现了对责任的分割

缺点:当产品类具有多层次的机构关系时,需要在工厂类中加入大量的判断逻辑,使得工厂类的复杂度会很高,不易于维护!

这一缺点会在工厂方法模式中得以克服,敬请关注工厂模式2 工厂方法模式!

http://blog.youkuaiyun.com/zj_1395201/article/details/6648464

如有疑问或者不同见解的读者请与我联系,互勉!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值