java设计模式--抽象工厂模式

抽象工厂模式

  1. 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
  2. 在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。

**优点:**当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。

**缺点:**产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的 Creator 里加代码,又要在具体的里面加代码。

使用场景: 1、QQ 换皮肤,一整套一起换。 2、生成不同操作系统的程序。

**注意事项:**产品族难扩展,产品等级易扩展。

实现代码

//为手机创建一个接口。
public interface IphoneProduct {

    void start();
    void end();
    void sentMessage();
}

//创建实现手机接口的实体类。
public class XiaomiPhone implements IphoneProduct {
    @Override
    public void start() {
        System.out.println("小米手机开机。");
    }

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

    @Override
    public void sentMessage() {
        System.out.println("小米手机发短信。");
    }
}

public class HuaweiPhone implements IphoneProduct {

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

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

    @Override
    public void sentMessage() {
        System.out.println("华为手机发短信。");
    }
}

//为路由器创建一个接口。
public interface IrouterProduct{

    void start();
    void end();
    void setting();
}

//创建实现路由器接口的实体类。
public class XiaomiRouter implements IrouterProduct {
    @Override
    public void start() {
        System.out.println("小米路由器开机。");
    }

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

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

public class HuaweiRouter implements IrouterProduct {

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

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

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

//创建一个超级工厂
public interface IProductFactory {

    IphoneProduct phoneProduct();

    IrouterProduct routerProduct();
}

//创建不同的产品族工厂
public class XiaomiFactory implements IProductFactory {
    @Override
    public IphoneProduct phoneProduct() {
        return new XiaomiPhone();
    }

    @Override
    public IrouterProduct routerProduct() {
        return new XiaomiRouter();
    }
}

public class HuaweiFactory implements IProductFactory {
    @Override
    public IphoneProduct phoneProduct() {
        return new HuaweiPhone();
    }

    @Override
    public IrouterProduct routerProduct() {
        return new HuaweiRouter();
    }
}


public class Test {

    public static void main(String[] args) {

        System.out.println("========小米工厂产品========");
        XiaomiFactory xiaomiFactory = new XiaomiFactory();

        IphoneProduct iphoneProduct = xiaomiFactory.phoneProduct();
        IrouterProduct irouterProduct = xiaomiFactory.routerProduct();
        iphoneProduct.start();
        iphoneProduct.end();
        iphoneProduct.sentMessage();
        irouterProduct.start();
        irouterProduct.end();
        irouterProduct.setting();

        System.out.println();

        System.out.println("========华为工厂产品========");
        HuaweiFactory huaweiFactory = new HuaweiFactory();

        IphoneProduct iphoneProduct1 = huaweiFactory.phoneProduct();
        IrouterProduct irouterProduct1 = huaweiFactory.routerProduct();
        iphoneProduct1.start();
        iphoneProduct1.end();
        iphoneProduct1.sentMessage();
        irouterProduct1.start();
        irouterProduct1.end();
        irouterProduct1.setting();

    }
}

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值