创建型模式-抽象工厂模式
抽象工厂模式案例
抽象工厂模式定义
抽象工厂模式在工厂方法模式做了一次封装
官方类图
产品族图
抽象工厂模式图
类图
代码实现抽象工厂模式案例
业务描述:
创建华为生产手机类
package com.gun.java23mvc.factory.abstracts;
/**
* 华为生产手机类
* @author jkl
*
*/
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("华为手机发送短信");
}
}
创建生产华为路由器
package com.gun.java23mvc.factory.abstracts;
/**
* 华为生产路由器
* @author jkl
*
*/
public class HuaWeiRouter implements IRouterProduct{
@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 com.gun.java23mvc.factory.abstracts;
/**
* 生产小米手机
* @author jkl
*
*/
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("小米发送短信");
}
}
创建小米生产路由器
package com.gun.java23mvc.factory.abstracts;
/**
* 生产小米路由器
* @author jkl
*
*/
public class XiaomiRouter implements IRouterProduct{
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 com.gun.java23mvc.factory.abstracts;
/**
* 生产手机接口
* @author jkl
*
*/
public interface IPhoneProduct {
public void start();//开机
public void shutdown();//关机
public void callUp();//打电话
public void sendSMS();//发送短信
}
创建路由器生产接口
package com.gun.java23mvc.factory.abstracts;
/**
* 生产路由器接口
* @author jkl
*
*/
public interface IRouterProduct {
public void start();//开机
public void shutdown();//关机
public void openWifi();//打开wifi
public void setting();//设置Wifi
}
创建统一抽象工厂生产接口
package com.gun.java23mvc.factory.abstracts;
/**
* 统一抽象产品工厂类
* @author jkl
*
*/
public interface IProductFactory {
//生产手机
IPhoneProduct iphoneProduct();
//生产路由器
IRouterProduct iRouterProduct();
}
创建华为工厂
package com.gun.java23mvc.factory.abstracts;
/**
* 华为工厂
* @author jkl
*
*/
public class HuaWeiFactory implements IProductFactory{
@Override
public IPhoneProduct iphoneProduct() {
return new HuaWeiPhone();
}
@Override
public IRouterProduct iRouterProduct() {
return new HuaWeiRouter();
}
}
创建小米工厂
package com.gun.java23mvc.factory.abstracts;
/**
* 小米工厂
* @author jkl
*
*/
public class XiaomiFactory implements IProductFactory{
@Override
public IPhoneProduct iphoneProduct() {
return new XiaomiPhone();
}
@Override
public IRouterProduct iRouterProduct() {
return new XiaomiRouter();
}
}
客户端测试抽象工厂模式
package com.gun.java23mvc.factory.abstracts;
/**
* 客户端测试购买华为手机和小米手机,及路由器
* @author jkl
*
*/
public class TestUserClient {
public static void main(String[] args) {
XiaomiFactory xiaomi = new XiaomiFactory();
IPhoneProduct product = xiaomi.iphoneProduct();
product.callUp();
product.sendSMS();
IRouterProduct router = xiaomi.iRouterProduct();
router.setting();
System.out.println("************************************");
//华为手机
HuaWeiFactory huawei = new HuaWeiFactory();
IPhoneProduct huaweiP = huawei.iphoneProduct();
huaweiP.callUp();
huaweiP.sendSMS();
//华为路由器
IRouterProduct routerp = huawei.iRouterProduct();
routerp.setting();
}
}
输出结果:
小米打电话
小米发送短信
设置小米路由器
************************************
华为手机打电话
华为手机发送短信
设置华为路由器