设计模式之工厂模式(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()也是普通工厂。但是是否产生单例,那就另当别论了。