工厂设计模式

来源:互联网 发布:编程入门软件 编辑:程序博客网 时间:2024/06/03 18:16

1. 什么是工厂设计模式?

本文部分内容参考自这2个地址,包括这里及这里,如有兴趣可自行前往查看。

Factory design pattern is used when we have a super class with multiple sub-classes and based on input, we need to return one of the sub-class. This pattern take out the responsibility of instantiation of a class from client program to the factory class.
工厂设计模式是在:当我们需要一个有多个子类的父类,并且我们能根据输入返回其中的子类的情形。工厂设计模式将初始化客户端的工作从客户端程序传递给了工厂类–即:工厂负责创建和初始化子类的工作。

该模式有什么优点呢?
1. Provide approach to code for interface rather than implementation.
2. Remove the instantiation of actual implementation classes from client code. Which makes our classes more robust, less coupled and easy to extend.
3. Factory design pattern provides abstraction between implementation and client classes through inheritance.

  1. 提供了一种更高级别的,编写接口类方法而不是直接实现;
  2. 移除了用户直接初始化的过程,这将使得类之间的耦合度更高,提高代码的鲁棒性。
  3. 通过继承的方式,工厂设计模式提供了具体子类的实现。

2. 工厂设计模式的UML图?

这里的UML图是设计一个Shape工厂,相应的接口(抽象类)可以依照情况自行修改。

这里写图片描述

3. java代码及相关解释

1). 设计抽象类(接口)Car.java

package com.fqyuan.factory;public abstract class Car {    private String name;    public String getName() {        return name;    }    public Car(String name) {        this.name = name;    }    public abstract void driving();}

2). 设计子类BigCar, MediumCar, SmallCar

package com.fqyuan.factory;public class BigCar extends Car {    public BigCar(String name) {        super(name);    }    @Override    public void driving() {        System.out.println(getName() + " running slowly!");    }}
package com.fqyuan.factory;public class MediumCar extends Car {    public MediumCar(String name) {        super(name);    }    @Override    public void driving() {        System.out.println(getName() + " running moderately!");    }}
package com.fqyuan.factory;public class SmallCar extends Car {    public SmallCar(String name) {        super(name);    }    @Override    public void driving() {        System.out.println(getName() + " running fast!");    }}

3). 设计工厂CarFactory

package com.fqyuan.factory;public class CarFactory {    public static Car produceCar(String name) {        if ("BigCar".equals(name))            return new BigCar(name);        else if ("MediumCar".equals(name))            return new MediumCar(name);        else {            return new SmallCar(name);        }    }}

4). 测试主函数

package com.fqyuan.factory;public class Main {    public static void main(String[] args) {        Car car1 = CarFactory.produceCar("BigCar");        Car car2 = CarFactory.produceCar("MediumCar");        Car car3 = CarFactory.produceCar("SmallCar");        car1.driving();        car2.driving();        car3.driving();    }}
//Running result:BigCar running slowly!MediumCar running moderately!SmallCar running fast!
原创粉丝点击