记录设计模式之工厂模式(一)

目录

一、什么是工厂模式?

二、工厂模式的分类

三、简单工厂模式

        定义:

        优缺点:

                优点:

                缺点: 

        适用环境及涉及角色 

       环境:

        角色:

        代码使用 

                pc接口

                具体类 戴尔

                具体类 微星

                具体工厂 电脑工厂

                产品使用


一、什么是工厂模式?

        工厂设计模式,顾名思义,就是用来生产对象的,在java中,万物皆对象,这些对象都需要创建,如果创建的时候直接new该对象,就会对该对象耦合严重,假如我们要更换对象,所有new对象的地方都需要修改一遍,这显然违背了软件设计的开闭原则,如果我们使用工厂来生产对象,我们就只和工厂打交道就可以了,彻底和对象解耦,如果要更换对象,直接在工厂里更换该对象即可,达到了与对象解耦的目的;所以说,工厂模式最大的优点就是:解耦

二、工厂模式的分类

        工厂模式主要分为三种:

                简单工厂模式
                工厂方法模式
                抽象工厂模式

        接下来我主要先说下简单工厂模式

三、简单工厂模式

        定义:

                定义一个工厂类,他可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。在简单工厂模式中用于被创建实例的方法通常为静态(static)方法,因此简单工厂模式又被成为静态工厂方法(Static Factory Method)。

        优缺点:

                优点:

                (1)工厂类包含必要的逻辑判断,可以决定在什么时候创建哪一个产品的实例。客户端可以免除直接创建产品对象的职责
    (2)客户端无需知道所创建具体产品的类名,只需知道参数即可
    (3)也可以引入配置文件,在不修改客户端代码的情况下更换和添加新的具体产品类。

                缺点: 

    (1)工厂类集中了所有产品的创建逻辑,职责过重,一旦异常,整个系统将受影响
    (2)使用简单工厂模式会增加系统中类的个数(引入新的工厂类),增加系统的复杂度和理解难度
    (3)系统扩展困难,一旦增加新产品不得不修改工厂逻辑,在产品类型较多时,可能造成逻辑过于复杂
    (4)简单工厂模式使用了static工厂方法,造成工厂角色无法形成基于继承的等级结构。

        适用环境及涉及角色 

       环境:

               (1)工厂类负责创建对的对象比较少,因为不会造成工厂方法中的业务逻辑过于复杂

    (2)客户端只知道传入工厂类的参数,对如何创建对象不关心

        角色:

                1、抽象产品
                2、具体产品
                3、具体工厂
                4、产品使用者 

        代码使用 

                pc接口

public interface Pc {
    void lol();
}

                具体类 戴尔

public class Dell  implements Pc{
    @Override
    public void lol() {
        //戴尔
    }
}

                具体类 微星

public class Msi implements  Pc {
    @Override
    public void lol() {
        //微星
    }
}

                具体工厂 电脑工厂

public class Computer {


        public Pc createPc(String type) {

            if (type.equals("微星")) {//购买微星
                return new Msi();
            } else if (type.equals("戴尔")) {//购买戴尔
                return new Dell();
            }

            return null;
        }

}

                产品使用

    public static void main(String[] args) {
        Computer pc = new Computer();
        Dell dell = (Dell) pc.createPc("戴尔");//买到戴尔
        Msi msi = (Msi) pc.createPc("微星");//买到微星

    }

简单工厂只适合于产品对象较少,且产品固定的需求,对于产品变化无常的需求来说显然不合适。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

herrybody

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

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

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

打赏作者

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

抵扣说明:

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

余额充值