资讯专栏INFORMATION COLUMN

工厂和抽象工厂模式

objc94 / 1281人阅读

摘要:工厂类没有此型号的产品测试类根据传入的参数来创建具体的类产品名产品名产品名运行结果产品名产品名产品名抽象工厂抽象工厂示意图抽象工厂抽象工厂实例工厂接口工厂实现类工厂生产不支持此类型的产品工程一样,就不写了。

工厂和抽象工厂模式 1. 简介

先来简单说一下什么是工厂模式和抽象工厂模式:

工厂模式:一般我们通过new创建一个产品类,为了简化操作我们可以创建一个工厂类,由这个工厂类负责创建所需要的产品;

抽象工厂模式:如果产品的种类多了,使用一个工厂可能不够,会导致逻辑复杂,可读性差等。这个时候我们可以定义一个工厂接口,通过多个工厂实现类来处理不同的产品。

2. 普通工厂 2.1 普通工厂UML

2.2 普通工厂实例

产品接口:

package com.wangjun.designPattern.factory;

public interface IProduct {
    
    public String info();
    
}

产品实现类:

package com.wangjun.designPattern.factory;

public class Product1 implements IProduct {

    @Override
    public String info() {
        return "Product1";
    }

}

其余4个Product类一样,就不写了。

工厂类:

package com.wangjun.designPattern.factory;

public class ProductFactory {
    
    public static IProduct createProduct(int type) {
        
        switch(type) {
            case 1:
                return new Product1();
            case 2:
                return new Product2();
            case 3:
                return new Product3();
            case 4:
                return new Product4();
            case 5:
                return new Product5();
            default:
                System.out.println("没有此型号的产品");
                return null;
        }
    }

}

测试类:

package com.wangjun.designPattern.factory;

public class Main {

    public static void main(String[] args) {
         //根据传入的参数来创建具体的类
        IProduct product1 = ProductFactory.createProduct(1);
        System.out.println("产品名:" + product1.info());
        
        IProduct product2 = ProductFactory.createProduct(2);
        System.out.println("产品名:" + product2.info());
        
        IProduct product3 = ProductFactory.createProduct(3);
        System.out.println("产品名:" + product3.info());
    }

}

运行结果:

产品名:Product1
产品名:Product2
产品名:Product3
3. 抽象工厂 3.1 抽象工厂示意图

3.2 抽象工厂UML

3.3 抽象工厂实例

工厂接口:

package com.wangjun.designPattern.abstractFactory;

public interface IFactory {
    
    public IProduct createProduct(int type);

}

工厂实现类:

package com.wangjun.designPattern.abstractFactory;

public class Factory1 implements IFactory {

    @Override
    public IProduct createProduct(int type) {
        System.out.println("工厂1生产");
        if(type == 1) {
            return new Product1();
        }else if(type == 2) {
            return new Product2();
        }else {
            System.out.println("不支持此类型的产品");
        }
        return null;
    }

}

工程2,3一样,就不写了。

产品接口:

package com.wangjun.designPattern.abstractFactory;

public interface IProduct {
    
    public String info();
    
}

产品实现类:

package com.wangjun.designPattern.abstractFactory;

public class Product1 implements IProduct {

    @Override
    public String info() {
        return "Product1";
    }

}

产品实现类2,3,4,5,6一样就不写了。

提供给外部调用的工程类:

package com.wangjun.designPattern.abstractFactory;

public class ProductFactory {
    
    public static IProduct createProduct(int type) {
        IFactory factory = null;
        
        //1,2类型使用工厂1生成;3,4类型使用工厂2生产;5,6类型使用工厂3生产
        if(type >= 1 && type <= 2) {
            factory = new Factory1();
        }else if(type >=3 && type <= 4) {
            factory = new Factory2();
        }else if(type >= 5 && type <= 6) {
            factory = new Factory3();
        }else {
            System.out.println("不支持此类型的产品");
            return null;
        }
        
        IProduct product = factory.createProduct(type);
        
        return product;
    }

}

测试类:

package com.wangjun.designPattern.abstractFactory;

public class Main {

    public static void main(String[] args) {
        IProduct product1 = ProductFactory.createProduct(1);
        System.out.println("产品名:" + product1.info());
        
        IProduct product2 = ProductFactory.createProduct(4);
        System.out.println("产品名:" + product2.info());
        
        IProduct product3 = ProductFactory.createProduct(5);
        System.out.println("产品名:" + product3.info());
    }

}

打印输出:

工厂1生产
产品名:Product1
工厂2生产
产品名:Product4
工厂3生产
产品名:Product5

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/77230.html

相关文章

  • JavaScript工厂模式

    摘要:基于工厂角色和产品角色的多态性设计是工厂方法模式的关键。工厂方法模式之所以又被称为多态工厂模式,是因为所有的具体工厂类都具有同一抽象父类。工厂方法模式总结工厂方法模式是简单工厂模式的进一步抽象和推广。 JavaScript工厂模式 首先需要说一下工厂模式。工厂模式根据抽象程度的不同分为三种 简单工厂模式 工厂方法模式 抽象工厂模式 1.简单工厂模式 简单工厂模式:又称为静态工厂方法...

    oujie 评论0 收藏0
  • Java 设计模式 简单工厂 工厂模式 抽象工厂

    摘要:简单工厂,工厂模式和抽象工厂。不要认为简单工厂是用就觉得一无是处,也不要觉得抽象工厂比较高大上就到处套。 工厂模式,实际上也会根据业务情景不同会有不同的实现方式。一般分为3种。简单工厂,工厂模式和抽象工厂。顾名思义,这三种从简单到抽象,名称越来越高大上,实现方式肯定是越来越复杂 结论1:三种工厂的实现越来越复杂 简单工厂 public class Factory { // 定义...

    CocoaChina 评论0 收藏0
  • js常用设计模式实现(二)工厂模式抽象工厂模式

    摘要:抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。前边的两个都是直接生产实例的,开始以为抽象工厂也是但是后来发现抽象工厂更像是生产工厂,其实抽象工厂其实是实现子类继承父类的方法。 创建型模式 创建型模式是对一个类的实例化过程进行了抽象,把对象的创建和对象的使用进行了分离 上一篇介绍了下单例模式,这一篇介绍一下工厂模式和抽象工厂模式,...

    meteor199 评论0 收藏0
  • PHP高级特性-反射Reflection以及Factory工厂设计模式的结合使用[代码实例]

    摘要:反射提供给面向对象编程可以自省的能力,即反射。在简单工厂模式中,根据传递的参数来返回不同的类的实例简单工厂模式又称为静态工厂方法模式。也就是简单工厂模式工厂工厂类。PHP高级特性-反射以及工厂设计模式的结合使用 [结合 Laravel-Admin 代码实例讲解]利用反射来实现工厂模式的生产而无需创建特定的工厂类本文地址http://janrs.com/?p=833转载无需经过作者本人授权转载...

    番茄西红柿 评论0 收藏2637
  • Java 设计模式工厂模式

    摘要:与以往的使用的方式不同,工厂模式使用工厂实例化对象。抽象工厂模式亮相抽象工厂模式抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。 写在前面 这篇博文介绍设计模式的形式将与其他篇博文不太一样,这里我们将从一个问题入手,逐步了解到简单工厂、工厂方法与抽象工厂模式。 PS:这篇博文涉及的内容较多,所以篇幅有点长,请耐心阅读。 为什么要使用工厂模式? 在 OO ...

    Jochen 评论0 收藏0
  • python设计模式-抽象工厂模式

    摘要:源码参考抽象工厂模式抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要指定具体类。工厂方法模式和抽象工厂模式如何选择开始的时候,可以选择工厂方法模式,因为他很简单只需要继承,并实现工厂方法即可。 问题:在上一篇 python设计模式:工厂方法模式我们尝试使用工厂方法创建了披萨店,现在为了保证披萨加盟店也能有良好的声誉,我们需要统一原材料,这个该如何做呢? 为了确保每家加盟...

    seal_de 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<