比如要生产华为手机,华为路由器,小米手机,小米路由器
先写路由器和手机的接口:
package abstract1;
//手机产品接口
public interface IphoneProduct {
void start();
void shutdown();
void callup();
void sendMes();
}
package abstract1;
//路由器产品接口
public interface IRouteProduct {
void start();
void shutdown();
void openWifi();
void setting();
}
再分别实现一个小米手机和小米路由器
以及华为手机华为路由器
package abstract1;
//小米手机
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 sendMes() {
System.out.println("小米发短信");
}
}
package abstract1;
//小米路由器
public class XiaomiRoute implements IRouteProduct {
@Override
public void start() {
System.out.println("启动小米路由器");
}
@Override
public void shutdown() {
System.out.println("关闭小米路由器");
}
@Override
public void openWifi() {
System.out.println("打开小米wifi");
}
@Override
public void setting() {
System.out.println("小米设置");
}
}
华为手机和路由器
package abstract1;
//华为手机
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 sendMes() {
System.out.println("华为手机发短信");
}
}
package abstract1;
//华为路由器
public class HuaweiRoute implements IRouteProduct {
@Override
public void start() {
System.out.println("启动华为路由器");
}
@Override
public void shutdown() {
System.out.println("关闭华为路由器");
}
@Override
public void openWifi() {
System.out.println("打开华为wifi");
}
@Override
public void setting() {
System.out.println("华为设置");
}
}
再实现一个产品工厂接口,生产手机和路由器:
package abstract1;
//抽象产品工厂
public interface IProductFactory {
//生产手机
IphoneProduct iphoneProduct();
//生产路由器
IRouteProduct routerProduct();
}
然后再实现这个接口,
华为生产手机和路由器的工厂
小米生产手机和路由器的工厂:
package abstract1;
//华为工厂
public class HuaweiFactory implements IProductFactory {
@Override
public IphoneProduct iphoneProduct() {
return new HuaweiPhone();
}
@Override
public IRouteProduct routerProduct() {
return new HuaweiRoute();
}
}
package abstract1;
//小米工厂
public class XiaomiFactory implements IProductFactory {
@Override
public IphoneProduct iphoneProduct() {
return new XiaomiPhone();
}
@Override
public IRouteProduct routerProduct() {
return new XiaomiRoute();
}
}
最后模拟一个client去调用
package abstract1;
public class Client {
public static void main(String[] args) {
System.out.println("-----------小米系列产品------------");
//小米工厂
XiaomiFactory xiaomiFactory = new XiaomiFactory();
IphoneProduct iphoneProduct = xiaomiFactory.iphoneProduct();
iphoneProduct.callup();
iphoneProduct.shutdown();
IRouteProduct iRouteProduct = xiaomiFactory.routerProduct();
iRouteProduct.openWifi();
iRouteProduct.setting();
System.out.println("-----------华为系列产品------------");
//华为工厂
HuaweiFactory huaweiFactory = new HuaweiFactory();
iphoneProduct = huaweiFactory.iphoneProduct();
iphoneProduct.callup();
iphoneProduct.shutdown();
iRouteProduct = huaweiFactory.routerProduct();
iRouteProduct.openWifi();
iRouteProduct.setting();
}
}
总结一下,抽象工厂就是工厂的工厂
好了,今天就先到这里