设计模式之工厂模式(1)

讲工厂模式之前先来谈谈设计模式中最简单的模式 单例,很简单就是永远只能得到一个实现。

Car:

package cn.asto.factory;

public class Car {
    private static Car car = new Car();
    private Car(){}
    public static Car getInstance(){
        return car;
    }
}

不多说了 

Car car = Car.getInsatnce)();这个car就是一个单例模式,很简单。

多例:也差不多

Car:

package cn.asto.factory;

import java.util.ArrayList;
import java.util.List;

public class Car {
    private static int max = 10;//最大实现数
    private static int index = 0;
    private static List<Car>  cars= new ArrayList<Car>();
    static {
        int i = 0;
        while(i++<max){
            cars.add(new Car());
        }
    }
    private Car(){}
    public static Car getInstance(){
        if(index==max) return null;
        Car car = cars.get(index);
        index++;
        return car;
    }
}

也没什么好说的,自己写了一个小demo,无非就是存了一个ArrayList,构造私有,在list装入指定数量的car.数据库的连接池就是这样子设计的,一上来什么都先不管,初始化一个List,list.size()就是数据库最大连接数。


接下来讲点跟主题相关的,不然跑太远了。

扯点专业术语,普通工厂

弄一个功能接口:Moveable

package cn.asto.simple;

public interface Moveable {

    public void move();
}

在弄一个实体类:

package cn.asto.simple;

public class Car implements Moveable{

    @Override
    public void move() {
        System.out.println("Car is running");
        
    }

}

弄一个工厂抽象类

package cn.asto.simple;

public abstract class Factory {

    public abstract Moveable create();
}

油盐酱醋都上齐了,接下来就让主角登场,普通工厂(实现抽象工厂的方式)

CarFactory:

package cn.asto.simple;
public class CarFactory extends Factory {

    @Override
    public Moveable create() {
        // TODO Auto-generated method stub
        return new Car();
    }

    

}

非常简单,不解释了。

如果想再来一个工厂比如飞机工厂,

新建一个Plane类实现Moveable接口

新建一个PlaneFactory实现Factory抽象方法。return new Plane();即可。

其实上面的getInstance()也是普通工厂。但是是否产生单例,那就另当别论了。

原文地址:https://www.cnblogs.com/think-in-java/p/4751246.html