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:

  • 相关阅读:
    Sikuli:创新的图形化编程技术
    缺少对象 WScript 问题解决方法
    TD8.0迁移到QC9.2,自动迁移失败,手动迁移
    QTP使用小技巧
    外部VBS的调用
    mysql 发生系统错误1067的解决方法
    Mysql 本地计算机无法启动 mysql 服务 错误 1067:进程意外终
    windows下mysql忘记root密码的解决方法
    mysql 常用命令用法总结积木学院整理版
    java、c/c++ 、python 等性能比较 杂谈(整理)
  • 原文地址:https://www.cnblogs.com/wangmingshun/p/10193222.html
Copyright © 2011-2022 走看看