1.产品类
###手机产品
0.手机类抽象接口
public interface IPhoneProduct {
void start();
void shutdown();
void callup();
void sendSMS();
}
1.小米手机产品类
public class xiaomiPhone implements IPhoneProduct {
@Override
public void start() {
System.out.println("开启小米手机");
}
@Override
public void shutdown() {
System.out.println("关闭小米手机");
}
@Override
public void callup() {
System.out.println("小米手机打电话");
}
@Override
public void sendSMS() {
System.out.println("小米手机发短信");
}
}
2.华为手机产品类
public class HuaweiPhone implements IPhoneProduct {
@Override
public void start() {
System.out.println("开启华为手机");
}
@Override
public void shutdown() {
System.out.println("关闭华为手机");
}
@Override
public void callup() {
System.out.println("华为手机打电话");
}
@Override
public void sendSMS() {
System.out.println("华为手机发短信");
}
}
###路由产品
0.路由类抽象接口
public interface IRouterProduct {
void start();
void shutdown();
void openWife();
void setting();
}
1.小米路由产品类
public class XiaomiRouter implements IRouterProduct {
@Override
public void start() {
System.out.println("启动小米路由器");
}
@Override
public void shutdown() {
System.out.println("关闭小米路由器");
}
@Override
public void openWife() {
System.out.println("打开小米wifi");
}
@Override
public void setting() {
System.out.println("小米路由器设置");
}
}
2.华为路由产品类
public class HuaweiRouter implements IRouterProduct {
@Override
public void start() {
System.out.println("开启华为路由器");
}
@Override
public void shutdown() {
System.out.println("关闭华为路由器");
}
@Override
public void openWife() {
System.out.println("打开华为WiFi");
}
@Override
public void setting() {
System.out.println("华为路由器设置");
}
}
2.工厂类
0.抽象工厂类
public interface IProductFactory {
IPhoneProduct iPhoneProduct();
IRouterProduct routerProduct();
}
1.小米工厂类
public class XiaomiFactory implements IProductFactory {
@Override
public IPhoneProduct iPhoneProduct() {
return new xiaomiPhone();
}
@Override
public IRouterProduct routerProduct() {
return new XiaomiRouter();
}
}
2.华为工厂类
public class HuaweiFactory implements IProductFactory {
@Override
public IPhoneProduct iPhoneProduct() {
return new HuaweiPhone();
}
@Override
public IRouterProduct routerProduct() {
return new HuaweiRouter();
}
}
3.调用者
public class Client {
public static void main(String[] args){
XiaomiFactory xiaomiFactory = new XiaomiFactory();
IPhoneProduct iPhoneProduct = xiaomiFactory.iPhoneProduct();
iPhoneProduct.callup();
iPhoneProduct.sendSMS();
IRouterProduct iRouterProduct = xiaomiFactory.routerProduct();
iRouterProduct.openWife();
###########################################
HuaweiFactory huaweiFactory = new HuaweiFactory();
iPhoneProduct = huaweiFactory.iPhoneProduct();
iPhoneProduct.callup();
iPhoneProduct.sendSMS();
iRouterProduct = huaweiFactory.routerProduct();
iRouterProduct.openWife();
}
区别
工厂方法模式:
一个抽象产品类,可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类只能创建一个具体产品类的实例。
抽象工厂模式:
多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类可以创建多个具体产品类的实例。
区别:
工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。
工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。
两者皆可。