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

18 篇文章 0 订阅
3 篇文章 0 订阅

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

1.对工厂模式的理解

同样的一个理论原则,每个人的理解方式不一样,不过有简单法则,尽量让一切都保持简单,所以我尽量用一种简单的方式来理解工厂模式

假设一个很简单的场景:

我们想要生产一部手机,首先得拿到各种原材料,还要再做成各种配件,CPU、屏幕、摄像头等,然后还要一步一步地组装在一起。

但是这其中我们需要关注的东西实在太多太多,各种配件的尺寸大小,手机怎么设计、组装步骤等,而且每一步都要自己亲手来做。再者,如果我们需要的不止一部手机,而是多部呢?

最简单的解决办法:

找一个专门生产手机的工厂,不管他怎么做,只要产品能用,我们需要时直接去拿,然后给钱就行,这样一来我们就不需要再关注手机生产的过程,我们需要做的就是在需要时去获取就行,其他的问题交给工厂来处理,这就是工厂模式

1.1工厂模式

实现创建者和调用者之间的分离,解耦,降低类和类之间的依赖关系。

以前我们编写的很多程序,特别是面向对象编程的时候,往往都是先写一个父类,然后创建子类去继承,若要扩展,再继续继承,最后用 new 去获取对象的实例,这样一来,类和类之间的依赖关系就很密切,耦合度很高,这对于代码的扩展和维护来说觉得不是一件好事,而工厂模式就很好地解决了这个问题。

2.简单工厂模式

以手机产品为例,当我们(User)需要使用产品时,来看看工厂(Factory)模式应怎么去生成手机
在这里插入图片描述

2.1 明确我们要生产的东西
//Phone.java
package com.tsymq.factoryPattern.simpleFactory;
public class Phone {
    public Phone(){
    }
}

没错,仅仅是一般手机,没有任何内容的简单手机

2.2 不同的手机有不同的品牌、设计图
//XiaoMi.java
package com.tsymq.factoryPattern.simpleFactory;
public class XiaoMi extends Phone{
    public XiaoMi(){
        System.out.println("XiaoMi Phone. Created.");
    }
}

//HuaWei.java
package com.tsymq.factoryPattern.simpleFactory;
public class HuaWei extends Phone {
    public HuaWei(){
        System.out.println("HuaWei Phone. Created.");
    }
}
2.3 然后把设计图给工厂
//PhoneFactory.java
package com.tsymq.factoryPattern.simpleFactory;
public class PhoneFactory {
    public static Phone creatPhone(String brand){
        if(brand.equals("XiaoMi")){
            return new XiaoMi();
        }
        else if(brand.equals("HuaWei")){
            return new HuaWei();
        }
        else
            return null;
    }
}
2.4 获取产品

手机的生产已经交给工厂来完成,User需要时直接获取就行

//User1.java
package com.tsymq.factoryPattern.simpleFactory;
public class User1 {
    public static void main(String[] args){
        //用户需要时就从工厂获取
        PhoneFactory.creatPhone("XiaoMi");
        PhoneFactory.creatPhone("HuaWei");
    }
}

3.总结和问题

总结
  1. 简单工厂模式可以用来生产同一等级结构中的任意产品。(对于新增加的产品,需要修改已有代码)
  2. 虽然某种程度不符合设计原则,但实际用的最多,事实也证明,很好用。
问题
  1. 若用户需要新产品,但工厂没有,就需要在工厂中添加产品才能满足用户的需求,修改了工厂。
  2. 若已有的产品有变化,或者工厂的生产流水线发生改变,则需修改工厂类,要找到相应的一段代码对其进行修改,也修改了工厂。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值