首页 > 其他 > 详细

简单工厂模式

时间:2021-01-22 16:52:34      阅读:22      评论:0      收藏:0      [点我收藏+]

一、什么是简单工厂模式

简单工厂模式指的是静态工厂模式,它就是通过传进来的参数,来具体决定创建哪一个产品类的实例。这些产品类又继承自一个父类或者是接口。就是将一个具体类的实例化交给一个静态工厂方法来执行。

二、简单工厂模式的结构

工厂角色:被外界直接调用,负责创建所有具体产品类的实例。

抽象产品角色:是所有的具体产品角色的父类,定义了它们的公共接口

具体产品角色:继承自抽象产品角色,一般有多个,是工厂角色创建的目标。

三、简单工厂模式的应用场景

当工厂类负责创建的对象比较少,不会造成工厂类业务逻辑太复杂。客户端只需要传入工厂类参数就可以了,不需要关心创建的具体过程。

四、简单工程模式和工厂方法模式的区别

工厂模式特点:

1.工厂类负责创建的对象比较少,不会造成工厂类业务逻辑太复杂。

2.客户端只需要传入工厂类参数就可以了,不需要关心创建的具体过程

工厂方法模式:

1.客户端不知道它所需要的对象的类。

2.抽象工厂类通过其子类来指定创建哪个对象。

五、简单工厂模式和策略模式的异同

简单工厂模式:我们只需要传递相应的条件就能得到想要的一个对象,然后通过这个对象实现算法的操作。

策略模式:必须首先创建一个想使用的类对象,然后将该对象最为参数传递进去,通过该对象调用不同的算法。

简单工厂模式中实现了通过条件选取一个类去实例化对象,策略模式则将选取相应对象的工作交给模式的使用者,它本身不去做选取工作。

说白了就是一个在内部去选去创建。后者则是先进行选取创建好了之后再作为参数传进去。

六、简单工厂模式的优缺点

优点:

外界不需要创建具体那个产品,只需要消耗产品就可以了,明确了各自的职责和权力,有利于整个软件体系结构的优化。

缺点:

1.因为工厂类集中了所有对象的创建逻辑,违反了开闭原则。

2.如果需要添加新的类,工厂方法也需要修改,这种条件判断和产品类型判断交错在一起的方式,对系统维护和扩展非常不利。

开闭原则定义:

对扩展开放,对修改关闭。我的具体理解如下:

当你去创建一个模块的时候应该尽可能的写的足够好,以后需要增加新的功能,不应该去更改已经写过的模块,而是去增加一个新的模块。也就是功能的扩展,应该是写新的java代码,而不是去修改原有的代码。

七、简单工厂模式的实现

1.创建一个抽象手机类的模板

public abstract class ApplePhone {
    /**
     * 苹果手机类
     */
    protected abstract void getSize();
}

  

2.创建三各类去实现上面那个抽象手机类

public class IphoneX extends ApplePhone{
    @Override
    protected void getSize() {
        System.out.println("3.5英寸");
    }
}

  

public class IphoneXR extends ApplePhone{
    @Override
    protected void getSize() {
        System.out.println("5.5英寸");
    }
}

  

public class IphoneXS extends ApplePhone{
    @Override
    protected void getSize() {
        System.out.println("4.5英寸");
    }
}

  

3.创建手机工厂决定具体生产那个手机

public class AppleFactory {
    public static ApplePhone createPhone(String model){
        ApplePhone applePhone = null;
        switch (model){
            case "iPhoneX":
                applePhone = new IphoneX();
                break;
            case "iPhoneXs":
                applePhone = new IphoneXS();
                break;
            case "iPhoneXr":
                applePhone = new IphoneXR();
                break;
            default:
                break;
        }
        return applePhone;
    }
}

  

4.测试只需要传入一个参数就可以得到相应的手机

public class Test {
    public static void main(String[] args) {
        ApplePhone applePhone;
        applePhone = AppleFactory.createPhone("iPhoneX");
        applePhone.getSize();
        applePhone = AppleFactory.createPhone("iPhoneXs");
        applePhone.getSize();
        applePhone = AppleFactory.createPhone("iPhoneXr");
        applePhone.getSize();
    }
}

  

八、总结:

1.对象的创建与对象的使用过程分离。
2.当你需要什么,只需要传入一个正确的参数,根据参数的不同返回不同类的实例,无须知道其创建细节。

3.专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

4.工厂类不够灵活。
5.工厂类负责创建的对象比较少。

 

简单工厂模式

原文:https://www.cnblogs.com/yaoyaoo/p/14312937.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!