简单工厂模式
/**
* 汽车形状接口
*/
public interface Car {
/**
* 显示汽车品牌方法
*/
void showBrand();
}
定义一个统一汽车接口。
/**
* 奔驰汽车
*/
public class BENZCar implements Car{
@Override
public void showBrand() {
System.out.println("奔驰");
}
}
定义不同品牌汽车去实现统接口。
/**
* 宝马汽车
*/
public class BMWCar implements Car {
@Override
public void showBrand() {
System.out.println("宝马");
}
}
定义一个工厂去生产汽车。
/**
* 汽车工厂
*/
public class CarFactory {
/**
* 根据汽车型号生产汽车
*
* @param brand
* @return
*/
public Car getCar(String brand) {
if ("BENZ".equals(brand)) {
//生产奔驰
return new BENZCar();
}
if ("BMW".equals(brand)) {
//生产宝马
return new BMWCar();
}
return null;
}
}
测试根据用户需要什么汽车生产什么汽车。
public static void main(String[] args) {
CarFactory carFactory = new CarFactory();
//根据客户需要生产汽车
Car BMWCar = carFactory.getCar("BMW");//生产宝马
Car BENZCar = carFactory.getCar("BENZ");//生产奔驰
BMWCar.showBrand();
BENZCar.showBrand();
}
工厂方法
定义一个工厂接口生产汽车。
/**
* 工厂接口
*/
public interface Factory {
//生产汽车
Car getCar();
}
各个品牌汽车工厂去实现工厂接口。
/**
* 奔驰工厂
*/
public class BENZFactory implements Factory {
/**
* 生产奔驰汽车
*
* @return
*/
@Override
public Car getCar() {
return new BENZCar();
}
}
/**
* 宝马工厂
*/
public class BMWFactory implements Factory {
/**
* 生产宝马汽车
*
* @return
*/
@Override
public Car getCar() {
return new BMWCar();
}
}
不同工厂生产不同汽车。
public static void main(String[] args) {
//生产宝马汽车
Factory BMWFactory = new BMWFactory();
Car BMWCar = BMWFactory.getCar();
//生产奔驰汽车
Factory BENZFactory = new BENZFactory();
Car BENZCar = BENZFactory.getCar();
BMWCar.showBrand();
BENZCar.showBrand();
}
抽象工厂
定义工厂抽象类
/**
* 抽象工厂
*/
public abstract class AbstractFactory {
//获取轮胎
abstract Tyre getTyre(String brand);
//获取汽车
abstract Car getCar(String brand);
}
定义轮胎类和轮胎工厂
/**
* 轮胎接口
*/
public interface Tyre {
/**
* 显示轮胎品牌
*/
void showBrand();
}
/**
* 固特异轮胎
*/
public class Goodyear implements Tyre {
@Override
public void showBrand() {
System.out.println("固特异轮胎");
}
}
/**
* 米其林轮胎
*/
public class Michelin implements Tyre {
@Override
public void showBrand() {
System.out.println("米其林轮胎");
}
}
/**
* 轮胎工厂继承抽象工厂类
*/
public class TyreFactory2 extends AbstractFactory {
/**
* 根据轮胎型号生产轮胎
*
* @param brand
* @return
*/
public Tyre getTyre(String brand) {
if ("Michelin".equals(brand)) {
//生产米其林轮胎
return new Michelin();
}
if ("Goodyear".equals(brand)) {
//生产固特异轮胎
return new Goodyear();
}
return null;
}
@Override
Car getCar(String brand) {
return null;
}
}
更改汽车工厂类
/**
* 汽车工厂继承抽象工厂类
*/
public class CarFactory2 extends AbstractFactory {
/**
* 根据汽车型号生产汽车
*
* @param brand
* @return
*/
public Car getCar(String brand) {
if ("BENZ".equals(brand)) {
//生产奔驰
return new BENZCar();
}
if ("BMW".equals(brand)) {
//生产宝马
return new BMWCar();
}
return null;
}
@Override
Tyre getTyre(String brand) {
return null;
}
}
定义一个工厂制造器
/**
* 工厂创造器
*/
public class FactoryProducer {
public static AbstractFactory getFactory(String type) {
if ("Car".equals(type)) {
return new CarFactory2();
} else if ("Tyre".equals(type)) {
return new TyreFactory2();
}
return null;
}
}
测试
public static void main(String[] args) {
//获取汽车工厂
AbstractFactory carFactory = FactoryProducer.getFactory("Car");
//制造汽车
Car bmw = carFactory.getCar("BMW");
Car benz = carFactory.getCar("BENZ");
benz.showBrand();
bmw.showBrand();
//获取轮胎工厂
AbstractFactory tyreFactory = FactoryProducer.getFactory("Tyre");
//制造轮胎
Tyre michelin = tyreFactory.getTyre("Michelin");
Tyre goodyear = tyreFactory.getTyre("Goodyear");
michelin.showBrand();
goodyear.showBrand();
}
来源:https://www.cnblogs.com/lingdu9527/p/11213031.html