设计模式——工厂方法模式

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

设计模式——工厂方法模式

1.面向对象设计的基本原则

在了解这个模式之前,先简单了解一下面向对象设计的基本原则
  1. OCP(开闭原则:Open-Closed Principe):一个软件的实体应当对扩展开放,对修改关闭。这就意味着,以后要扩展新的功能,不能对当前的类进行修改来实现,而是通过增加新的类来实现。
  2. DIP(依赖倒转原则,Dependence Inversion Principle):要针对接口编程,不要针对实现编程。以前我们编程,同时通过类和类之间的调用。这个原则意味着,以后我们在编程的时候,应该多依赖于抽象而不是具体。这个意思就是,当前有A , B 两个类。当 A 需要去调用 B 时,B应该实现一个接口。A 应该直接和 B 的接口发生关系,而不是和B 的实现发生关系。
  3. LoD(迪亚密特,Law of Demeter):只与你直接的朋友通信,而避免和陌生人通信。这个意味着,一个类,尽量少依赖于其他类。这样可以实现类和类之间的解耦。如果依赖太多,以后在进行扩展时就会产生不利的影响。

2.对工厂方法模式的理解

我们不需要明白这个模式为什么要这样命名,只需要知道,工厂方法模式避免了简单工厂模式不满足OCP原则这一个缺点

工厂方法模式和简单工厂模式的不同在于,在同一个项目或者模块中,简单工厂模式只有一个工厂类,而方法工厂模式有一组实现了相同接口的工厂类。

3.工厂方法模式

3.1 我们同样还是以手机产品为简单的例子,要生产的东西是手机,手机有不同的品牌
//Phone.java
package com.tsymq.factoryPattern.factoryMethod;
public class Phone {
    public Phone(){
    }
}

//XiaoMi.java
package com.tsymq.factoryPattern.factoryMethod;
public class XiaoMi extends Phone{
    public XiaoMi(){
        System.out.println("XiaoMi Phone. Created.");
    }
}

//HuaWei.java
package com.tsymq.factoryPattern.factoryMethod;
public class HuaWei extends Phone {
    public HuaWei(){
        System.out.println("HuaWei Phone. Created.");
    }
}
3.2 让工厂的分工更明确

在简单工厂模式中,xiaomi和huawei两种手机都由一个工厂PhoneFactory来生产,现在为了让工厂的工作更专一,将一个工厂分为两个工厂

3.2.1 不管什么工厂,要做的事情只有一件,createPhone
//PhoneFactory.java
package com.tsymq.factoryPattern.factoryMethod;
import com.tsymq.factoryPattern.simpleFactory.Phone;
public interface PhoneFactory {
    public Phone createPhone();
}
3.2.2 给工厂详细分工
//生产xiaomi手机的工厂
//XiaoMiFactory.java
package com.tsymq.factoryPattern.factoryMethod;
public class XiaoMiFactory implements PhoneFactory {
    @Override
    public Phone createPhone() {
        return new XiaoMi();
    }
}

//生产huawei手机的工厂
//HuaWeiFactory,java
package com.tsymq.factoryPattern.factoryMethod;
public class HuaWeiFactory implements PhoneFactory{
    @Override
    public Phone createPhone() {
        return new HuaWei();
    }
}
3.3 现在用户可以直接从工厂获取产品了
//User.java
package com.tsymq.factoryPattern.factoryMethod;
public class User2 {
    public static void main(String[] args){
        //用户需要什么样的手机,直接从对应的工厂获取
        XiaoMiFactory factory1 = new XiaoMiFactory();
        factory1.createPhone();

        HuaWeiFactory factory2 = new HuaWeiFactory();
        factory2.createPhone();
    }
}

4.问题和思考

问题
  1. 新增产品时,也需要新建对应的工厂以保证产品正常生产。
  2. 一个产品对应一个工厂,生产方式需要修改时,修改相应的工厂即可。
  3. 若多个产品需要修改生产方式,则需修改同样数量的工厂,首先对号入座就是个问题,还不如使用简单工厂模式,最多就在一个工厂类中进行修改,只改变一个类。
思考

根据设计理论建议:使用工厂方法模式,解耦度高。但实际上,我们一般使用简单工厂模式,毕竟实用。

简单工厂模式入口

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值