硬肝系列:23种设计模式之工厂模式

对于“设计模式”这个词大家肯定都不陌生,很多框架也用到了设计模式,但是大部分的开发者应该是没有深入的了解过,我准备硬肝下这23设计模式作为专题文章的开端,一共23种设计模式,我尽量在<23天肝完。

为什么要学习设计模式:https://blog.csdn.net/kaituozhe_sh/article/details/107922339

在我大学四年,对设计模式也没有什么概念,写代码就想着能实现就可以了,不会有设计模式那样的思想,但是当学习到了框架的时候,对于设计模式才有了一些更深入的了解,使用设计模式的代码在扩展性上会比暴力的代码更容易维护,特别是当一个程序猿离职了后,你去接手它的代码,里面是一大堆if else,这样真的会崩溃,修改都不知道从何下手
在这里插入图片描述

硬肝系列目录

创建型模式

23种设计模式之工厂模式

23种设计模式之抽象工厂模式

23种设计模式之建造者模式

23种设计模式之原型模式

23种设计模式之单例模式

结构型模式

23种设计模式之适配器模式

23种设计模式之桥梁模式

23种设计模式之代理模式

23种设计模式之外观模式

23种设计模式之装饰器模式

23种设计模式之享元模式

23种设计模式之组合模式

行为型模式

23种设计模式之责任链模式

23种设计模式之命令模式

23种设计模式之迭代器模式

23种设计模式之中介者模式

23种设计模式之备忘录模式

一、工厂模式

工厂模式:实现创建者和调用者的分离。

1.简单工厂模式

简单工厂模式下面代码为例:
建造类接口:

public interface build {
    void build();
}

建造火车实现类:

public class buildTrain implements build{
    @Override
    public void build() {
        System.out.println("建造一辆火车");
    }
}

建造飞机实现类:

public class buildPlane implements build{
    @Override
    public void build() {
        System.out.println("建造一架飞机!!");
    }
}

建造汽车实现类:

public class buildCar implements build{
    @Override
    public void build() {
        System.out.println("建造一辆汽车");
    }
}

最后简单工厂类实现:

public class SimpleFactory {
    public static build getBuild(String type){
        if("train".equals(type)){
            return new buildTrain();
        }else if("plane".equals(type)){
            return new buildPlane();
        }else if("car".equals(type)){
            return new buildCar();
        }
        return null;
    }
}

然后调用main方法测试:

public static void main(String[] args) {
        Build build1 = SimpleFactory.getBuild("train");
        build1.build();
        Build build2 = SimpleFactory.getBuild("plane");
        build2.build();
    }

测试结果:

建造一辆火车
建造一架飞机!!

从这些代码我们可以看到,简单工厂实现起来容易,但是不易维护,如果需要建造零件呢?几百个零件就需要几百个if else吗?这显然是不现实的,简单工厂方法还破坏了面向对象设计的基本原则之一:OCP(开闭原则):一个软件的实体应当对扩展开放,对修改关闭。而工厂方法模式就很好的解决了这些问题。

2.工厂方法模式

同样是以建造为例
但是我们为每一个需要创造的东西都创建了一个工厂类,这样我们不到紧急时刻就可以不用修改之前的代码,而直接在老代码的基础上扩展实现更多的功能。
接口:

//我们为每一个实现类都创造了一个工厂,易于拓展

public interface BuildFactory {
    Build buildFactory();
}

工厂实现类:

public class TrainFactory implements BuildFactory{
    @Override
    public Build buildFactory() {
        return new buildTrain();
    }
}

public class CarFactory implements BuildFactory{
    @Override
    public Build buildFactory() {
        return new buildCar();
    }
}

public class PlaneFactory implements BuildFactory{
    @Override
    public Build buildFactory() {
        return new buildPlane();
    }
}

使用main方法测试:

public static void main(String[] args) {	
		//直接创建了一个工厂,并直接调用工厂中的方法,方法返回值就是所需要建造的对象
        Build buildFactory = new PlaneFactory().buildFactory();
        //然后调用对象的方法即可
        buildFactory.build();
    }

测试结果:

建造一架飞机!!

工厂方法模式的
优点:
1.避免创建者与具体的产品逻辑相耦合;
2.满足单一职责,每一个业务逻辑的实现都可以在自己的类中完成
3.满足开闭原则,无需修改使用调用方就可以在程序中引入新的功能
缺点:
比如由非常多的零件类型,那么其实现的子类会迅速扩张,也需要其他的设计模式进行优化

完成:TO: 2021/3/15 00:07

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沉淀顶峰相见的PET

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值