工厂模式

工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

1.简单工厂模式(静态工厂模式)

Car接口

public interface Car {
	void name();
}

Dazhong实现类

public class Dazhong implements Car{

	@Override
	public void name() {
		System.out.println("一汽大众!");
	}

}

Wuling实现类

public class Wuling implements Car{

	@Override
	public void name() {
		System.out.println("五菱宏光!");
	}

}

CarFactory工厂类

public class CarFactory {
	
	public static Car getCar(String name) {
		if (name.equals("大众")) {
			return new Dazhong();
		}else if (name.equals("五菱")) {
			return new Wuling();
		}else {
			return null;
		}
	}
}

测试类

public class Test11 {
	public static void main(String[] args) {
		Car car = CarFactory.getCar("大众");
		Car car1 = CarFactory.getCar("五菱");
		
		car.name();
		car1.name();
	}
}

2.工厂方法模式

Car接口

public interface Car {
	void name();
}

Dazhong实现类

public class Dazhong implements Car{

	@Override
	public void name() {
		System.out.println("一汽大众!");
	}

}

CarFactory接口

public interface CarFactory {
	Car getCar();
}

DazhongFactory实现类

public class DazhongFactory implements CarFactory{

	@Override
	public Car getCar() {
		return new Dazhong();
	}

}

测试类

public class Test22 {

	public static void main(String[] args) {
		CarFactory carFactory=new DazhongFactory();
		carFactory.getCar().name();
	}

}

3.抽象工厂模式

抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。

在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。

IPhoneProduct接口

//手机产品
public interface IPhoneProduct {
	//功能
	void open();
	void close();
	void phone();
}

IRouterProduct接口

//路由器产品
public interface IRouterProduct {
	//功能
	void open();
	void close();
	void setting();
}

XiaomiPhone实现类

public class XiaomiPhone implements IPhoneProduct{

	@Override
	public void open() {
		System.out.println("打开小米手机");
	}

	@Override
	public void close() {
		System.out.println("关闭小米手机");
	}

	@Override
	public void phone() {
		System.out.println("用小米手机打电话");
	}

}

XiaomiRouter实现类

public class XiaomiRouter implements IRouterProduct{

	@Override
	public void open() {
		System.out.println("打开小米路由器");
	}

	@Override
	public void close() {
		System.out.println("关闭小米路由器");
	}

	@Override
	public void setting() {
		System.out.println("设置小米路由器");
	}

}

HuaweiPhone实现类

public class HuaweiPhone implements IPhoneProduct{

	@Override
	public void open() {
		System.out.println("打开华为手机");
	}

	@Override
	public void close() {
		System.out.println("关闭华为手机");
	}

	@Override
	public void phone() {
		System.out.println("用华为手机打电话");
	}

}

HuaweiRouter实现类

public class HuaweiRouter implements IRouterProduct{

	@Override
	public void open() {
		System.out.println("打开华为路由器");
	}

	@Override
	public void close() {
		System.out.println("关闭华为路由器");
	}

	@Override
	public void setting() {
		System.out.println("设置华为路由器");
	}

}

IProductFactory接口(抽象工厂的接口)

//抽象的抽象,只关注产品族
public interface IProductFactory {
	//生产手机
	IPhoneProduct producePhone();
	//生产路由器
	IRouterProduct produceRouter();
}

XiaomiProductFactory实现类

//生产小米的工厂
public class XiaomiProductFactory implements IProductFactory{
	
	//小米手机
	@Override
	public IPhoneProduct producePhone() {
		return new XiaomiPhone();
	}

	//小米路由器
	@Override
	public IRouterProduct produceRouter() {
		return new XiaomiRouter();
	}

}

HuaweiProductFactory实现类

//生产华为的工厂
public class HuaweiProductFactory implements IProductFactory{

	//华为手机
	@Override
	public IPhoneProduct producePhone() {
		return new HuaweiPhone();
	}

	//华为路由器
	@Override
	public IRouterProduct produceRouter() {
		return new HuaweiRouter();
	}

}

测试

public class Test33 {
	public static void main(String[] args) {
		XiaomiProductFactory xiaomiProductFactory = new XiaomiProductFactory();
		xiaomiProductFactory.producePhone().phone();
		xiaomiProductFactory.producePhone().open();
		
		xiaomiProductFactory.produceRouter().close();
		xiaomiProductFactory.produceRouter().setting();
	}
}

在这里插入图片描述

总结:
抽象工厂接口只关注产品族(手机,路由器),产品功能由另外的接口负责。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值