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:

  • 相关阅读:
    阅读 Android源码的一些姿势
    Unity3d UGUI 界面适配 实例解析 三种适配方式
    Unity3D Android手机开发环境配置
    DOTween教程
    DoTween 部分中文文档
    C# 委托、事件,lamda表达式
    EditText中输入信息的限制的方法
    Android中shape中的属性大全
    Android 高版本API方法在低版本系统上的兼容性处理
    python 绘制f(x)=x^2
  • 原文地址:https://www.cnblogs.com/wangmingshun/p/10193222.html
Copyright © 2011-2022 走看看