工厂和笼统工厂模式
来源:     阅读:407
依创模板店
发布于 2020-11-08 02:02
查看主页

工厂和笼统工厂模式

1. 简介

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

2. 普通工厂

2.1 普通工厂UML

工厂模式UML.png

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 笼统工厂示用意

笼统工厂示用意.png

3.2 笼统工厂UML

笼统工厂UML.png

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
免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 系统环境 windows
相关推荐
iOS Base64URL编码 等同于java中的Base64.URL_SAFE | Base64.NO_WRAP |  Base64.NO_PADDING
什么是函数柯里化
js提取地址栏参数
设置mysql允许远程登录
什么是HTML5
首页
搜索
订单
购物车
我的