设计模式之简单工厂模式

1.解析

意图目的 :
定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂中的创建方法使得将类的实例化的延迟到其子类,即实例化其子类.

//缺少图片分析

简单说明 :
简单工厂模式是工厂模式中最简单的. 工厂类中有一个静态方法,用来接受参数,并根据参数的类型创建不同的实例.


2.实例

业务说明 :
面粉,我们可以制作不同的食物,比如饺子,面条,馒头.下面用这个实例解释下简单的工厂模式.

$. 准备原材料-面粉 , 开店面 .

(1) 实现面粉接口, 并提供制作方法, 用来制作食物

public interface MianFen {
   void makeFood();
}

(2) 实现饺子类: 招聘制作饺子的大厨, 来制作饺子

public class JiaoZi implements MianFen{

    @Override
    public void makeFood() {
        System.out.println("端饭饺子饭喽!");
    }
}

(3) 实现面条类: 招聘制作面条的大厨,来制作面条

public class Noodles implements MianFen{

    @Override
    public void makeFood() {
        System.out.println("端面条饭喽!");
    }
}

(4) 实现馒头类: 招聘制作馒头的大厨, 来制作馒头

public class MaiTou implements MianFen {
    @Override
    public void makeFood() {
        System.out.println("端馒头饭喽!");
    }
}

$. 开始生产 面条 , 饺子 , 馒头 .

(5) 实现工厂类 ,用来告知那个大厨去制作食物

public class SimpleFactory {

    public static final String MIANFEN_JIAOZI="jiaozi";
    public static final String MIANFEN_MAITOU="maitou";
    public static final String MIANFEN_NOODLES="noodles";

    public static MianFen WoYao(String type){
        if(type.equals(MIANFEN_JIAOZI)){
            //生成饺子
            return new JiaoZi();
        }else if(type.equals(MIANFEN_MAITOU)){
            //生成唛头
            return new MaiTou();
        }else if(type.equals(MIANFEN_NOODLES)){
            //生成面条
            return new Noodles();
        }
        return null;
    }

}

$. 开门迎客, 用户点什么, 给用户制作什么食物

(6) 实现测试 : 用户点什么, 给用户制作什么食物

public class TestFactory {

    public static void main(String[] args) {

        SimpleFactory.WoYao(SimpleFactory.MIANFEN_JIAOZI).makeFood();
        SimpleFactory.WoYao(SimpleFactory.MIANFEN_MAITOU).makeFood();
        SimpleFactory.WoYao(SimpleFactory.MIANFEN_NOODLES).makeFood();
        System.out.println("Thanks");
    }
}

(7) 实例结语
通过这一实例,很简单的就可以理解简单工厂模式.在实例中,最重要的是用户点饭了(SimpleFactory类), 用户点什么饭, SimpleFactory 告知大厨做什么饭. 所以 SimpleFactory 是十分重要的存在!
结果 :

这里写图片描述


3.优缺点

优点 :
(1) 当一个类不知道他所必须创建对象的类的时候.
(2) 当一个类希望他的子类来指定的时候.
(3) 拥有必要的逻辑判断能力和创建能力.
(4) 保证代码复用,各类完全离,避免更高代码意原源代码改错.

缺点 :
(1) “高内聚”, 整个系统都依赖于SimpleFactory 类.
(2) 想增加一个产品的时候, 需要修改SimpleFactory 类.
(3) 当我们拥有很多很多产品的时候,而且产品之间又存在复杂的层次关系的时候,这个类必须拥有复杂的逻辑判断能力,其代码量也将不断地激增,这对以后的维护简直就是恐怖.
(4) 当系统中的具体产品类不断增多时,可能会出现要求工厂类也要做相应的修改,扩展性并不很好.


4.用途

使用场景 :
(1) 工厂类负责创建的对象比较少;
(2) 客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心;
(3) 由于简单工厂很容易违反高内聚责任分配原则,因此一般只在很简单的情况下应用。

使用总结 :
简单工厂在你的工厂处理类型不会变动的非常频繁,而又会有变动的可能性的时候使用.

例如 :
(1) 计算器: + , - , x , / ,运算.
(2) 日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方.
(3) 数据库访问类:访问可能是SQLSERVER、ORACLE等,用记可以选择创建访问不同的数据库。

5.Demo免积分下载

http://download.csdn.net/detail/lablenet/9281221

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值