23种设计模式-抽象工厂模式

Posted yppaopao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了23种设计模式-抽象工厂模式相关的知识,希望对你有一定的参考价值。

抽象工厂模式

  定义:抽象工厂模式提供了一个创建一系列类相关或相互依赖对象的接口,无需指定他们具体的类

  使用场景:

    客户端(应用层)不依赖于产品类实例如何被创建、实现等细节

    强调一系列相关的产品对象(属于同一产品族)一起创建对象需要大量的重乎代码

    提供一个产品类的库。所有的产品以同样的接口出现,从而是的客户端不依赖于具体的实现

  优点:

    具体产品在应用层的代码隔离,无需关心创建的细节

    将一个系列的产品统一到一起创建

  缺点:

    规定了所有可能被创建的产品集合,产品簇中扩展新的产品困难:

    增加了系统的抽象性和理解难度

UML类图

技术图片

 

抽象工厂接口

package factory.abstract1;
//抽象的产品工厂
public interface IProductFactory {
    //生产手机
        IphoneProduct iphoneProduct();
    //生产路由器
        IRouterProduct routerProduct();
        //生产笔记本  添加一个 要改动一系列的代码
}

  

手机产品接口

package factory.abstract1;
//手机产品接口
public interface IphoneProduct {

    void start();
    void shutdown();
    void callup();
    void sendSMS();
}

 路由器产品接口

package factory.abstract1;
//路由器产品接口
public interface IRouterProduct {
    void start();
    void shutdown();
    void openWifi();
    void  setting();
}

 小米工厂

package factory.abstract1;

public class XiaomiFactory implements IProductFactory {
    @Override
    public IphoneProduct iphoneProduct() {
        return new XiaomiPhone();
    }

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

  生产小米手机

package factory.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 sendSMS() {
        System.out.println("小米手机发短信");

    }
}

  生产小米路由器

package factory.abstract1;

public class XiaomiRouter  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 factory.abstract1;

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

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

生产华为手机

package factory.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 sendSMS() {
        System.out.println("华为手机发短信");

    }
}

  生产华为路由器

package factory.abstract1;

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 factory.abstract1;

public class Client {
    public static void main(String[] args) {
        System.out.println("=========小米系列===============");
        XiaomiFactory xiaomiFactory = new XiaomiFactory();

        IphoneProduct iphoneProduct = xiaomiFactory.iphoneProduct();
        iphoneProduct.callup();
        iphoneProduct.sendSMS();

        IRouterProduct iRouterProduct = xiaomiFactory.routerProduct();
        iRouterProduct.openWifi();
        iRouterProduct.setting();

        System.out.println("=========华为系列===============");
        HuaweiFactory huaweiFactory = new HuaweiFactory();

        iphoneProduct = huaweiFactory.iphoneProduct();
        iphoneProduct.callup();
        iphoneProduct.sendSMS();

        iRouterProduct = huaweiFactory.routerProduct();
        iRouterProduct.openWifi();
        iRouterProduct.setting();
    }
}

  

以上是关于23种设计模式-抽象工厂模式的主要内容,如果未能解决你的问题,请参考以下文章

23种设计模式:抽象工厂模式

23种设计模式——抽象工厂模式对象创建

23种设计模式:抽象工厂模式

GoF 23种设计模式之简单工厂模式工厂方法模式和抽象工厂模式

23种设计模式[3]:抽象工厂模式

23种设计模式之抽象工厂模式