Java设计模式——工厂模式

定义:

工厂模式是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。

工厂模式根据抽象程度的不同分为三种:

  1. 简单工厂模式(也叫静态工厂模式)
  2. 工厂方法模式(也叫多形性工厂)
  3. 抽象工厂模式(也叫工具箱)

简单工厂模式

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

工厂方法模式

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

抽象工厂模式

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

工厂方法模式应该在实际中用的较多,我们以工厂方法模式举例

抽象的产品类:定义car 交通工具类

public interface Car {    
    void gotowork();
}

定义实际的产品类,总共定义两个,bike 和bus 分别表示不同的交通工具类

public class Bike implements Car {
@Override
public void gotowork() {
System.out.println("骑自行车去上班!");
}
}

public class Bus implements Car {
@Override
public void gotowork() {
System.out.println("坐公交车去上班!");
}
}

定义抽象的工厂接口

public interface ICarFactory {
Car getCar();
}

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

public class BikeFactory implements ICarFactory {
@Override
public Car getCar() {
return new Bike();
}
}

public class BusFactory implements ICarFactory {
@Override
public Car getCar() {
return new Bus();
}
}

简单的测试类,来验证不同的工厂能够产生不同的产品对象

public class TestFactory {
@Test
public void test() {
ICarFactory factory = null;
// bike
factory = new BikeFactory();
Car bike = factory.getCar();
bike.gotowork();

    // bus
    factory = new BusFactory();
    Car bus = factory.getCar();
    bus.gotowork();
}

}

工厂模式的优点:

    1、一个调用者想创建一个对象,只要知道其名称就可以了,降低了耦合度。

    2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。使得代码结构更加清晰。

    3、屏蔽产品的具体实现,调用者只关心产品的接口。

工厂模式的缺点:

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

工厂模式的适用场景:

    1,  一个对象拥有很多子类。

    2,  创建某个对象时需要进行许多额外的操作。

    3,  系统后期需要经常扩展,它把对象实例化的任务交由实现类完成,扩展性好。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 工厂模式是我们日常开发中经常使用的设计模式。当我们需要创建一些比较负责的对象的时候,为了将对象的初始化部分进行隔离...
    MrKing5946阅读 2,885评论 0 0
  • 一、工厂模式简介 意图定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进...
    怡红快绿阅读 3,725评论 0 0
  • 一、工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。 工厂模式在...
    逆风飞行1226阅读 3,633评论 0 0
  • 在java中,通常使用new操作符创建对象的实例。但是在一些情况下,new操作符直接生成对象会带来一些问题,例如:...
    步积阅读 4,373评论 2 3
  • 《蟋蟀比蚂蚁有钱?》这本书主要讲的是储蓄。储蓄是一个很容易被忽略的事情。我的原生家庭中,父母对于储蓄这块不是很关注...
    快快妈妈育儿说阅读 1,612评论 0 0

友情链接更多精彩内容