由于blog各种垃圾评论太多,而且本人审核评论周期较长,所以懒得管理评论了,就把评论功能关闭,有问题可以直接qq骚扰我

设计模式—工厂模式

JAVA 西门飞冰 55℃

根据此视频输出本篇blog 【IT老齐189】23种设计模式之工厂模式

工厂模式简介

⼯⼚模式也称简单⼯⼚模式,是创建型设计模式的⼀种,这种设计模式提供了按需创建对象的最佳⽅式。同时,这种创建⽅式不会对外暴露创建细节,并且会通过⼀个统⼀的接⼝创建所需对象。

⼯⼚模式属于创建型模式的⼀种,其⽬的就是隐藏创建类的细节与过程。

在软件开发中,当我们会用到大量的创建某类或者某批对象时,就会使用到工厂模式

问题举例

以电脑店为例,我是⼀个纯⼩⽩,⾯对琳琅满⽬的各种电脑⼀脸懵X,根本⽆从下⼿~

//电脑接口
public interface Computer {
    public String describe();
}
//外星人游戏笔记本
public class Alienware implements Computer{
    @Override
    public String describe() {
        return "外星⼈ALIENWARE m15 R7 15.6英⼨⾼端游戏本 12代i7 32G RTX3060 QH D 240Hz ⾼刷屏 轻薄笔记本电脑2765QB";
    }
}
//高性能独显PC主机
public class Desktop implements Computer{
    @Override
    public String describe() {
        return "外星⼈ALIENWARE R13 ⽔冷电竞游戏⾼端台式机 第12代i7 32G 512GB+2 T RTX3070 办公台式机 9776W";
    }
}
//Macbook办公轻薄本
public class Macbook implements Computer{
    @Override
    public String describe() {
        return "Apple MacBook Pro 13.3 ⼋核M1芯⽚ 8G 256G SSD 深空灰 笔记本电脑 轻薄本 MYD82CH/A";
    }
}
//2U戴尔服务器
public class Server implements Computer{
    @Override
    public String describe() {
        return "戴尔(DELL) R740⼁R750⼁2U机架式服务器主机双路GPU深度学习 R740〖1*银牌4210R 10核20线程〗 8G内存⼁1TB SATA硬盘 ⼁H350戴尔(DELL";
    }
}

此时顾客将⾯对⼏⼗种不同性能,不同规格不同种类的电脑,难道顾客必须了解所有细节才能决定使⽤哪⼀个吗?

这⾥就破坏了“迪⽶特法则(知道的越少越好)”,⼤多数客户并不需要了解每⼀台细节,我们要把选择权交还给电脑店这⼀⽅。

控制权在顾客方是不对的

image-20220914103038112

我们需要⼀个⼯⼚类,帮助顾客进⾏决策,这样控制权掌握

image-20220914103127477

正确的做法

增加⼀个售货员帮助⽤户实现决策,根据客户的不同要求提供对应的产品。

这个售货员就是充当了“⼯⼚”的⻆⾊。

⼯⼚模式的特点:提供⽅法,返回接⼝。

public class ShopAssistant {
    public Computer suggest(String purpose){
        Computer computer = null;
        if(purpose.equals("网站建设")){
            return new Server();
        }else if(purpose.equals("电竞比赛")){
            return new Desktop();
        }else if(purpose.equals("⽇常办公")){
            return new Macbook();
        }else if(purpose.equals("3A游戏")){
            return new Alienware();
        }
        return computer;
    }
}

站在顾客这⼀⽅,获取对象的过程变得⾮常简单,通过售货员这个⼯⼚帮助我们获取需要的对象,同时不再关注对象创建的过程与细节。

public class Customer {
    public static void main(String[] args) {
        ShopAssistant shopAssistant = new ShopAssistant();
        Computer c = shopAssistant.suggest("网站建设");
        System.out.println(c.describe());
    }
}

项目中的作用

image-20220914103405330

 

转载请注明:西门飞冰的博客 » 设计模式—工厂模式

喜欢 (0)or分享 (0)