zoukankan      html  css  js  c++  java
  • 设计模式-工厂模式

    一、定义

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

    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:

  • 相关阅读:
    第一篇代码 嗨翻C语言 21点扑克
    Windows7 sp1 64位下安装配置eclipse+jdk+CDT+minGW
    MinGW-64 安装
    Windows Live Writer配置步骤
    Css 居中
    c++ 常量成员函数
    c/c++ 引用计数
    C++ 《STL源码剖析》学习-vector
    C/C++ 有符号数和无符号数
    cocos2d 内存管理机制
  • 原文地址:https://www.cnblogs.com/wangmingshun/p/10193222.html
Copyright © 2011-2022 走看看