java设计模式-工厂模式

1.普通工厂模式

1)简单工厂模式也叫静态工厂模式,就是工厂类一般使用静态方法,通过接收不同的参数来生成不同的对象实例。
2)对于增加新产品无能为力!不修改代码的话,是无法扩展的。
3)一般使用较多还是简单工厂模式。

/**
 * 抽象类-所有车的父类
 */
public interface Car {
	
	public void run();
}
/**
 * 实体类-宝马车
 */
public class BMWCar implements Car {

	@Override
	public void run() {
		System.out.println("宝马在跑" );
	}

}
/**
 * 实体类-奔驰车
 */
public class BenzCar implements Car {

	@Override
	public void run() {
		System.out.println("奔驰在跑");
	}

}
/**
 * 车的工厂类
 */
public class CarFactory {

	public static final int TYPE_BMW = 1;  //宝马
	public static final int TYPE_BENZ = 2;  //奔驰
	
	public static Car createCar(int type) {
		Car car = null;
		switch (type) {
		case CarFactory.TYPE_BMW:
			car = new BMWCar();
			break;
		case CarFactory.TYPE_BENZ:
			car = new BenzCar();
			break;
		default:
			throw new RuntimeException("找不到你要的车!");
		}
		return car;
	}
	
}
/**
 * 测试类
 */
public class Test {
	
	public static void main(String[] args) {
		Car bmw = CarFactory.createCar(CarFactory.TYPE_BMW);
		bmw.run();
		Car benz = CarFactory.createCar(CarFactory.TYPE_BENZ);
		benz.run();
		try {
			CarFactory.createCar(3);
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
	}
}

2.工厂方法模式

1)解决简单工厂模式不满足开闭原则的缺点。

2)工厂方法模式和简单工厂模式最大的不同在于,简单工厂模式只有一个(对于一个项目或者一个独立模块而言)工厂类,而工厂方法模式有一组实现了相同接口的工厂类。

/**
 * 车的工厂类
 */
public interface CarFactory {

	public Car createCar(); 
	
}

 

/**
 *  宝马工厂类
 */
public class BMWFactory implements CarFactory {
	
	private static BMWFactory instance = new BMWFactory();

	private BMWFactory() {
	}

	public static BMWFactory getInsance() {
		return BMWFactory.instance;
	}

	@Override
	public BMWCar createCar() {
		return new BMWCar();
	}

}
/**
 *  奔驰工厂类
 */
public class BenzFactory implements CarFactory {
	
	private static BenzFactory instance = new BenzFactory();

	private BenzFactory() {
	}

	public static BenzFactory getInsance() {
		return BenzFactory.instance;
	}

	@Override
	public BenzCar createCar() {
		return new BenzCar();
	}

}
/**
 * 测试类
 */
public class Test {
	
	public static void main(String[] args) {
		Car bmw = BMWFactory.getInsance().createCar();
		bmw.run();
		Car benz = BenzFactory.getInsance().createCar();
		benz.run();
	}
}

简单工厂与工厂方法模式的对比:

1)但从设计理论的角度出发,肯定是工厂方法更好,符合OCP原则,结构复杂度虽然高了一点,但代码复杂度降低了很多。

2)但是随着产品种类的增加,使用工厂方法模式会一直增加工厂类,管理难度增加,不熟悉的人真不知道用哪个工厂类。简单工厂方法就一个类,虽然需要修改代码,但是代码量比较少。

所以还是建议使用简单工厂模式。

3.抽象工厂模式

抽象工厂模式与工厂模式有本质的区别,工厂模式是针对不同的产品,抽象工厂则是针对产品族。

/**
 *	发动机
 */
public interface Engine {
	public void run();
}

/**
 *  A型发动机
 */
public class EngineA implements Engine {

	@Override
	public void run() {
		System.out.println("A型发动机启动了!");
	}

}

/**
 *  B型发动机
 */
public class EngineB implements Engine {

	@Override
	public void run() {
		System.out.println("B型发动机启动了!");
	}

}
/**
 * 轮胎
 */
public interface Tyre {
	public void run();
}

/**
 *	A类轮胎
 */
public class TyreA implements Tyre {

	@Override
	public void run() {
		System.out.println("A类轮胎在跑!");
	}

}

/**
 *	B类轮胎
 */
public class TyreB implements Tyre {

	@Override
	public void run() {
		System.out.println("B类轮胎在跑!");
	}

}
/**
 *	抽象工厂类
 */
public interface AbstractFactory {
	Engine createEngine();
	Tyre createTyre();
}

/**
 *  A类产品族的抽象工厂
 */
public class AbstractFactoryA implements AbstractFactory {

	@Override
	public Engine createEngine() {
		return new EngineA();
	}

	@Override
	public Tyre createTyre() {
		return new TyreA();
	}

}

/**
 *  B类产品族的抽象工厂
 */
public class AbstractFactoryB implements AbstractFactory {

	@Override
	public Engine createEngine() {
		return new EngineB();
	}

	@Override
	public Tyre createTyre() {
		return new TyreB();
	}

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值