设计模式(三):抽象工厂模式

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();
    }

区别
工厂方法模式:
一个抽象产品类,可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类只能创建一个具体产品类的实例。
抽象工厂模式:
多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类可以创建多个具体产品类的实例。
区别:
工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。
工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。
两者皆可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值