浅谈设计模式之工厂模式

什么是工厂模式

工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来, 达到提高灵活性的目的。
工厂模式分为三类:
1)简单工厂模式(Simple Factory)
2)工厂方法模式(Factory Method)
3)抽象工厂模式(Abstract Factory)
这三种模式从上到下逐步抽象,并且更具一般性。

简单工厂模式

简单工厂模式又叫静态工厂方法模式。从命名上就可以看出这个模式一定很简单(都说简单了,还能怎样)。它存在的目的也很简单:定义一个用于创建对象的接口。

1、简单工厂模式的组成

  1. 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由 一个具体类实现。
  2. 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽 象类来实现。
  3. 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。

2、场景模拟

华哥,一位爱好按摩的同事。刚毕业的时候收入没那么高,常出入于一些低消费的城中村按摩店。店里有15、16、17号三位技师坐在大堂等着华哥挑选,华哥抬手一指,点了15号技师。15号技师起身说:“先生您好,15号技师Tony老师为您服务!”,然后就带华哥去按摩房按摩去了。
那么这家城中村按摩店就是工厂,技师就是所有技师的统称,即抽象产品。15、16、17号技师就是具体产品角色。

3、代码演示

package DesignPattern.Factory.SimpleFactory;

//抽象产品角色(虽然考了130+的英语,但高考后我已经毫无保留的换给老师了)
public interface JiShi {
    //按摩服务
    public void anMo();
}


//具体技师(15号) 
public class JiShi15 implements JiShi{
    @Override
    public void anMo() {
        System.out.println("15号技师Tony老师为您服务!");
    }
}

//具体技师(16号) 
public class JiShi16 implements JiShi{
    @Override
    public void anMo() {
        System.out.println("16号技师Jack老师为您服务!");
    }
}

//具体技师(17号) 
public class JiShi17 implements JiShi{
    @Override
    public void anMo() {
        System.out.println("17号技师Mike老师为您服务!");
    }
}


//工厂(城中村按摩店)
public class AnMoDian {
    //挑选技师,返回类型为抽象的技师类
    public static JiShi pickJiShi(String s){
        if("15".equals(s)){
            return new JiShi15();
        }else if("16".equals(s)){
            return new JiShi16();
        }else if("17".equals(s)){
            return new JiShi17();
        }else{
            //默认Tony老师接客啦
            return new JiShi15();
        }
    }
}


店有了,技师有了,下面欢迎华哥出场...


//顾客(华哥)
public class Customer {
    public static void main(String[] args) {
        //去店里选技师
        JiShi jishi = AnMoDian.pickJiShi("15");
        //选到技师,开始按摩
        jishi.anMo();//15号技师Tony老师为您服务!
    }
}

4、总结

从开闭原则(对扩展开放;对修改封闭)上来分析下简单工厂模式。当按摩店新招一位技师的时候,只要提供相同的按摩服务,那么华哥去按摩店都能点了。所以对技师部分来说,它是符合开闭原则的;但是按摩店部分好像不太理想,因为每新招一位技师,都要在工厂类中增加相应的业务逻辑或者判断逻辑,这显然是违背开闭原则的。可想而知对于新产品的加入,工厂类是很被动的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值