脚本宝典收集整理的这篇文章主要介绍了十万字《源码中的设计模式》之简单工厂模式——接口和抽象类(建议收藏),脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
🌲本文收录于专栏《源码中的设计模式》——理论与实战的完美结合
作者其它优质专栏推荐F1a;
📚《leetcode 300题》——每天一道算法题,进大厂必备
📚《糊涂算法》——从今天起,迈过数据结构和算法这道坎
📚《从实战学python》——Python的爬虫,自动化,ai等实战应用(代码开源)
点击跳转到文末领取粉丝福利
哈喽,大家好,我是一条~
国庆正是弯道超车的时候,向大家推荐一本个人觉得写的非常好的书——《redis深度历险 核心原理与应用实践》。
我们接着聊设计模式,新同学可以先看一下《23种设计模式的一句话通俗解读》全面的了解一下设计模式,形成一个整体的框架,再逐个击破。
往期回顾:原型模式、建造者模式
今天我们一块看一下简单工厂模式,其实他不属于23种设计模式,但为了更好的理解后面的工厂方法和抽象工厂,我们还是需要先了解一下。
官方定义
定义一个工厂类,他可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。
通俗解读
我们不必关心对象的创建细节,只需要根据不同参数获取不同产品即可。
难点:写好我们的工厂。
@H_512_86@目录结构本文源码:简单工厂模式源码 提取码: qr5h
建议跟着一条学设计模式的小伙伴都建一个maven
工程,并安装lombok
依赖和插件。
并建立如下包目录,便于归纳整理。
pom
如下
<dePEndency>
<groupId>org.PRojectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.10</version>
</dependency>
汽车制造工厂,既可以生产跑车,也可以生产SUV,未来还会生产新能源汽车。
1.创建抽象产品Car
public abstract class Car {
public String color;
abstract void run();
}
2.创建具体产品
SuvCar
public class SuvCar extends Car{
public SuvCar(){
this.color="green";
}
@override
public void run() {
System.out.println("SuvCar running---------");
}
}
SportsCar
public class SportsCar extends Car{
public SportsCar(){
this.color="red";
}
@Override
public void run() {
System.out.println("SportsCar running-------");
}
}
3.创建静态工厂
在简单工厂模式中用于被创建实例的方法通常为静态方法,因此简单工厂模式又被成为静态工厂方法(static Factory Method)。
/**
* 简单/静态工厂,少数产品
*/
public class CarFactory {
public static Car getCar(String type){
if (type.equals("sport")){
return new SportsCar();
}else if (type.equals("suv")){
return new SuvCar();
}else {
return null;
}
}
}
4.编写测试类
public class Maintest {
public static void main(String[] args) {
SportsCar sport = (SportsCar) CarFactory.getCar("sport");
sport.run();
System.out.println(sport.color);
}
}
5.输出结果
补充一个知识:
接口和抽象类有什么区别?
什么时候用接口,什么时候用抽象类?
static
, 而抽类象不是。工厂类负责创建对的对象比较少,因为不会造成工厂方法中的业务逻辑过于复杂
客户端只知道传入工厂类的参数,对如何创建对象不关心
由于简单工厂很容易违反高内聚责任分配原则,因此一般只在很简单的情况下应用。
优点
缺点
问题:在不修改的工厂的前提下,怎么生产新能源汽车?下一节的工厂方法模式给大家讲解。
以上是脚本宝典为你收集整理的十万字《源码中的设计模式》之简单工厂模式——接口和抽象类(建议收藏)全部内容,希望文章能够帮你解决十万字《源码中的设计模式》之简单工厂模式——接口和抽象类(建议收藏)所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。