设计模式_01 简单工厂模式

1. 简单工厂模式简介
简单工厂模式的主要核心是:根据不同的情况(比如你输入的参数)给你返回不同的对象。
举例:最简单的例子是电饭锅。根据你不同的按钮返回一个不同的对象(这个对象有最高温度的属性)。你如果要烧水,它返回的那个对象的温度是100°。你如果要保温,这个温度可能就只有35°等等。
 
2. 简单工厂模式代码分析
 我们先来看一下任务(就是保温或烧水)的对象的父类。

//任务对象的父类
public class Task {
    //功能名称
    public String taskName;
    //温度
    public Integer temperature;

    //最大温度阀值
    public void maxThreshould(){
        System.out.println("最大温度为:"+temperature);
    }
}

 
接下来我们看一下保温对象的代码

//保温,继承Task类
public class KeepWarm extends Task{

    public String taskName = "保温";
    public Integer temperature = 35;
}

 
接下来我们看一下烧水对象的代码

//烧水,继承Task类
public class BoilingWater extends Task {
    public String taskName = "烧水";
    public Integer temperature = 100;
}

 
 接下来我们来看重点,简单对象工厂的代码

//简单对象工厂的代码
public class OperationFactory {

    public static Task getTask(String taskName){
        if("保温".equals(taskName)){
            return new KeepWarm();
        }
        if("烧水".equals(taskName)){
            return new BoilingWater();
        }
        return null;
    }
}

 这样我们只要输入相对应的功能名称,就能得到不同的对象。
 
3. 探讨设计原理
   看到这里,估计有些人会对这个例子不满意。那我就稍微模拟一下对话。以下是戏精时间:
大佬:这个例子是不是有点问题?不能将烧水和保温的功能一块放在一个对象中吗? 
回: 例子是没有问题的。烧水和保温的功能也是可以放在一起的。
 
大佬: 那为什么不将烧水和保温的功能放在一块呢?
回: 这个涉及到耦合问题了。如果你要保温功能去掉呢?如果你要新增一个煮饭功能呢?是不是得改代码
 
大佬: 那你新增一个煮饭功能就不需要改代码了?
回: 也是需要改的。但是我这边就直接在工厂类中进行修改就好了。但是你将所有的功能都放在一个类中,就显得代码比较臃肿,不方便维护。放在工厂类中就减少了他们之间的耦合。
 
大佬: 既然都要改,有啥区别?
回: 这个涉及到安全问题,如果按照你那种将所有功能全都放在一起的方法,那你必须将所有的代码给你。比如你要修改保温功能,那你是不是可以任意改烧水的功能逻辑呢?但是如果按照简单对象工厂来设计的话,你只能改你自己保温的功能。
 
大佬: 这样是不是有点麻烦了?
回: 是的,虽然分类多了,但是你代码也更清晰了。安全性也得到保证了。最简便的方法就是我们将所有的方法都写在一个类中,但是这样我们后期维护的成本就会很高。就像注释一般,没了注释,你的代码肯定更少了,但是没有注释的话,后期如果要改功能就太耗费时间去看代码了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值