• 设计模式-工厂模式


    一、定义

    工厂方法模式是简单工厂的进一步深化,在工厂方法模式中,我们不再提供一个统一的工厂类来创建所有的产品,而是针对不同的产品提供不同的工厂。也就是说每个产品都有一个与之对应的工厂。 定义一个创建产品的接口(工厂接口),让实现这个接口的类来决定实例化那个类,让类的实例化推迟到实现这个接口的子类中。

    Product抽象产品类:负责定义产品的共性。

    Creator抽象工厂类:负责定义工厂的共性。

    ConcreateProcuct:具体的产品实现类。

    ConcreateCreator:具体的工厂实现类,负责创建产品。

    二、类型

     创建型

    三、适用场景

    • 客户端不需要知道它所依赖的产品类是如何创建的。
    • 客户端可以通过指定工厂类的子类来创建对应的对象。

    四、优点

    • 客户端只需要知道产品对应的工厂,无需关心其创建细节。
    • 加入新产品只需要实现对应的工厂,符合开闭原则。

    五、缺点

     类的个数容易过多,增加了系统的复杂度。

    六、类图

     

    七、代码实现

     产品接口:

    package com.wms.factory;
    
    public interface Fruit {
        void produce();
    }

     产品实现类:

    package com.wms.factory;
    
    public class Banana implements Fruit {
        public void produce() {
            System.out.println("生产香蕉");
        }
    }
    package com.wms.factory;
    
    public class Apple implements Fruit {
        public void produce() {
            System.out.println("生产苹果");
        }
    }

     工厂接口:

    package com.wms.factory;
    
    public interface Factory {
        Fruit getFruit();
    }

    工厂实现类:

    package com.wms.factory;
    
    public class AppleFactory implements Factory {
        public Fruit getFruit() {
            return new Apple();
        }
    }
    package com.wms.factory;
    
    public class BananaFactory implements Factory {
        public Fruit getFruit() {
            return new Banana();
        }
    }

    客户端:

    package com.wms.factory;
    
    public class TestDesignPattern {
        public static void main(String[] args) {
            Factory appleFactory = new AppleFactory();
            Fruit apple = appleFactory.getFruit();
            apple.produce();
            Factory bananaFactory = new BananaFactory();
            Fruit banana = bananaFactory.getFruit();
            banana.produce();
        }
    } 

     八、JDK或开源框架中实现

    JDK:

  • 相关阅读:
    调试技术 Orisun 博客园
    Core Dump和/proc调试 Orisun 博客园
    再谈select, iocp, epoll,kqueue及各种I/O复用机制 Shallway 博客频道 CSDN.NET
    基础很重要
    Speech and Language Processing (2nd Ed.): Updates
    CS 288: Statistical Natural Language Processing
    对C++中string类型的总结
    HTTP代理实现请求报文的拦截与篡改1 jivi 博客园
    学习优秀源码 Orisun 博客园
    分享:苹果老员工可享两年离岗留职待遇
  • 原文地址:https://www.cnblogs.com/wangmingshun/p/10193222.html
Copyright © 2020-2023  润新知