浅识JAVA设计模式——工厂模式(一)

版权声明:本文为 Codeagles 原创文章,可以随意转载,但必须在明确位置注明出处!!!

工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。看到这个名字不难想象到我们要做什么,当然就是创造工厂,那么工厂是干什么的?当然是生产创造用的了,生产什么呢?JAVA中一切万物皆对象,工厂用来生产对象。
工厂模式通常分为:

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

想要用工厂模式,那就要知道这么几个问题:

  • 为什么要用
  • 有什么好处
  • 有什么坏处
  • 怎么用

OK,其他的细枝末节先不深入,先搞懂这几个问题就好了,深入的随着理解和实践,认知也会越来越深入的。
首先,为什么要用?
我们知道设计模式无疑就是通过经验来总结出比较合理的代码结构,目的也很明确,挂在嘴边的高内聚、低耦合,设计模式为了解耦,代码更合理。
有什么好处呢?

  • 扩展性高
  • 让调用者只用接口,而不去注重内部实现
  • 当然最好的就是,调用者只需要知道对象名字就可以,不需要关注怎么创建。(创建由子类进行)

有什么坏处呢?
相对也是显而易见的,每次增加一个需求或者说产品,都要对应增加一个对象工厂以及实例类,如果系统很大,那么类个数是巨多的,无疑维护成本提升了。
那么,最后一个问题怎么用?

Talk is cheap, show me the code.

简单工厂

package design;
  //抽象机器
abstract class Mechine {
    public abstract void move();
    public abstract void stop();
}
  // 抽象机器实例——汽车
class Car extends Mechine {
    @Override
    public void move() {
        System.out.println("汽车正以80迈速度驶过来。。。");
    }
    @Override
    public void stop() {
        System.out.println("一脚急刹车,滑行20米停下来了。。");
    }
  }
  // 抽象机器实例——飞机
  class Airplane extends Mechine {
    @Override
    public void move() {
        System.out.println("飞机正在起飞。。。");
    }
    @Override
    public void stop() {
        System.out.println("飞机准备降落。。。");
    }
  }

//简单工厂
public class MechineFactory {
    public static Mechine createMechine(String mechineName) {
        Mechine mechine = null;
        if(mechineName.equals("car")){
            mechine= new Car();
        }
        if(mechineName.equals("airplane")){
            mechine= new Airplane();
        }
        return mechine;
    }
}
public class Boss {
    public static void main(String[] args) {
        // Boss下令“我要造一辆轿车,现在马上!会动的!”
        // 机器工厂接到指令,立即开始做ing。。。
        Mechine mechine = MechineFactory.createMechine("car");
        mechine.move();
        //Boss:"我好几个亿的生产线不能这么放着,造一辆飞机,会飞会降落的"
        mechine = MechineFactory.createMechine("airplane");
        mechine.move();
        mechine.stop();
    }
  }

这就是简单工厂,那么工厂方法模式,其实是简单工厂的扩展,说白了就是简单工厂抽象化。

工厂方法模式

package design;
  //抽象机器
abstract class Mechine {
    public abstract void move();
    public abstract void stop();
}
  // 抽象机器实例——汽车
class Car extends Mechine {
    @Override
    public void move() {
        System.out.println("汽车正以80迈速度驶过来。。。");
    }
    @Override
    public void stop() {
        System.out.println("一脚急刹车,滑行20米停下来了。。");
    }
  }
  // 抽象机器实例——飞机
  class Airplane extends Mechine {
    @Override
    public void move() {
        System.out.println("飞机正在起飞。。。");
    }
    @Override
    public void stop() {
        System.out.println("飞机准备降落。。。");
    }
  }

//简单工厂抽象化
abstract class MechineFactory {
    public abstract  Mechine createMechine(String mechineName);
}
//汽车工厂--只负责创建汽车
public class CarFactory extends MechineFactory{
    @Override
    public Mechine createMechine(String mechineName) {
        return new Car();
    }
}
public class Boss {
    public static void main(String[] args) {
        // Boss下令“我要造一辆轿车,现在马上!会动的!”
        // 机器工厂接到指令,立即开始做 
        MechineFactory mf = new CarFactory();
        Mechine m=mf.createMechine("car");
        m.move();
    }
}

show完code是不是有点概念了,当然模式只是模式,还有很多种写法,只要是这种思想就可以,比如还可用接口implement来写,那样更好理解,这里给出这种写法,也是自己想锻炼一下。

总结

这里只讲了前两种,至于抽象工厂,后续更新。简单工厂和工厂方法区别在于,一个用工厂创建对象,一个用工厂创建单一产品工厂在创建对象。

参考

工厂方法

你可能感兴趣的:(浅识JAVA设计模式——工厂模式(一))