美文网首页
设计模式-工厂模式

设计模式-工厂模式

作者: 语隔秋烟_ | 来源:发表于2020-05-28 14:24 被阅读0次

定义:
工厂模式是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。

工厂模式根据抽象程度的不同分为三种:
简单工厂模式(也叫静态工厂模式)
工厂方法模式(也叫多形性工厂)
抽象工厂模式(也叫工具箱)

简单工厂模式
实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。

工厂方法模式
工厂方法是粒度很小的设计模式,因为模式的表现只是一个抽象的方法。 提前定义用于创建对象的接口,让子类决定实例化具体的某一个类,即在工厂和产品中间增加接口,工厂不再负责产品的创建,由接口针对不同条件返回具体的类实例,由具体类实例去实现。

抽象工厂模式
当有多个抽象角色时使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品对象。它有多个抽象产品类,每个抽象产品类可以派生出多个具体产品类,一个抽象工厂类,可以派生出多个具体工厂类,每个具体工厂类可以创建多个具体产品类的实例。

工厂模式的优点

  1. 一个调用者想创建一个对象,只要知道其名称就可以了,降低了耦合度。
  2. 扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。使得代码结构更加清晰。
  3. 屏蔽产品的具体实现,调用者只关心产品的接口。

工厂模式的缺点
每次增加一个产品时,都需要增加一个具体类和对象实现工厂(这里可以使用反射机制来避免),使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。所以对于简单对象来说,使用工厂模式反而增加了复杂度。

工厂模式的适用场景

  1. 一个对象拥有很多子类。
  2. 创建某个对象时需要进行许多额外的操作。
  3. 系统后期需要经常扩展,它把对象实例化的任务交由实现类完成,扩展性好。
/**
 * @program: Design
 * @description:定义一个人员接口,创建一个介绍自己的名字的方法
 * @author: lijun
 **/
public interface IPersonFactory {
    void myName();
}

定义实际人员,总共两个角色,德玛西亚(PersonOne)和提莫(PersonTwo),并且在一个工厂(IPersonFactory )工作

/**
 * @program: Design
 * @description:
 * @author: lijun
 **/
public class PersonOne implements IPersonFactory {

    public void myName() {
        System.out.println("我叫德玛西亚");
    }
}



/**
 * @program: Design
 * @description:
 * @author: lijun
 **/
public class PersonTwo implements IPersonFactory {
    public void myName() {
        System.out.println("我叫提莫!");
    }
}


定义抽象的工厂接口

public interface IFactory {
    IPersonFactory getPerson();
}

具体的工厂子类,分别为每个具体的人员类创建不同的工厂子类

/**
 * @program: Design
 * @description:
 * @author: lijun
 **/
public class PersonOneFactory implements IFactory {
    public IPersonFactory getPerson() {
        return new PersonOne();
    }
}

/**
 * @program: Design
 * @description:
 * @author: lijun
 **/
public class PersonTwoFactory implements IFactory {
    public IPersonFactory getPerson() {
        return new PersonTwo();
    }
}

最后进行测试

/**
 * @program: Design
 * @description:
 * @author: lijun
 **/
public class TestFactory {

    public static void main(String[] args) {
        IPersonFactory factory = null;
        factory = new PersonOne();
        factory.myName();

        factory = new PersonTwo();
        factory.myName();
    }

}

最后输出结果:


image.png

总结:
无论是简单工厂模式、工厂模式还是抽象工厂模式,它们本质上都是将不变的部分提取出来,将可变的部分留作接口,以达到最大程度上的复用。究竟用哪种设计模式更适合,这要根据具体的业务需求来决定。

相关文章

  • 设计模式四、抽象工厂模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 抽象工厂模式 ...

  • 工厂模式

    java设计模式-工厂模式 工厂模式: 工厂模式是java设计模式里最常用的设计模式之一。 工厂模式属于创建型模式...

  • 设计模式之工厂模式

    设计模式之工厂模式 标签(空格分隔): 设计模式 工厂模式 设计模式的感念 设计模式的应用 工厂设计模式的产生 工...

  • 设计模式三、工厂模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 工厂模式 在一...

  • 设计模式一、单例模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 简单单例(推荐...

  • 单件设计模式

    一、定义 设计模式 设计模式就是一种更好的编写代码方案。 常见设计模式 工厂设计模式、抽象工厂设计模式、抽象工厂设...

  • iOS设计模式(三)之抽象工厂模式

    设计模式系列传送门 iOS设计模式(一)之简单工厂模式iOS设计模式(二)之工厂模式iOS设计模式(三)之抽象工厂...

  • iOS设计模式(一)之简单工厂模式

    设计模式系列传送门 iOS设计模式(一)之简单工厂模式iOS设计模式(二)之工厂模式iOS设计模式(三)之抽象工厂...

  • iOS设计模式(二)之工厂模式

    设计模式系列传送门 iOS设计模式(一)之简单工厂模式iOS设计模式(二)之工厂模式iOS设计模式(三)之抽象工厂...

  • 常用设计模式

    设计模式 工厂模式 工厂模式思路上分:简单工厂模式,工厂模式, 抽象工厂模式// 抽象工厂模式可以代替工厂模式,做...

网友评论

      本文标题:设计模式-工厂模式

      本文链接:https://www.haomeiwen.com/subject/indoahtx.html