zoukankan      html  css  js  c++  java
  • Java 工厂方法模式的简单示例

    工厂方法模式:也叫工厂模式,属于类创建型模式,工厂父类(接口)负责定义产品对象的公共接口,而子类工厂则负责创建具体的产品对象。

    目的:是为了把产品的实例化操作延迟到子类工厂中完成,通过工厂子类来决定究竟应该实例化哪一个产品具体对象。

    工厂方法模式包含四个部分:

    1.抽象产品:产品对象同一的基类,或者是同一的接口。

    2.具体的产品:各个不同的实例对象类

    3.抽象工厂:所有的子类工厂类的基类,或是同一的接口

    4.具体的工厂子类:负责每个不同的产品对象的实际创建

    具体代码示例,我们以买水果作为演示。

    定义买的接口:

    public interface IFrutis {
        void buy();
    }

    定义两个实现接口的类:

    public class Banana implements  IFrutis{
        @Override
        public void buy() {
            System.out.println("欢迎来买香蕉");
        }
    }

     抽象的工厂接口:

    public interface IFruitFactory {
        IFrutis createFactory();
    }

    具体工厂子类:

    public class BananaFactory implements IFruitFactory {
        @Override
        public IFrutis createFactory() {
            return new Banana();
        }
    }
    public class AppleFactory implements IFruitFactory {
        @Override
        public IFrutis createFactory() {
            return new Apple();
        }
    }

    测试:

    public class StudentTest {
        public static void main(String[] args) {
            //根据 需求的水果 生成 实体工厂
            //创建香蕉工厂
            IFruitFactory iFruitFactory = new BananaFactory();
            //实体工厂
            IFrutis banana = iFruitFactory.createFactory();
            banana.buy();
    
            IFruitFactory iFruitFactory1 = new AppleFactory();
            IFrutis factory = iFruitFactory1.createFactory();
            factory.buy();
    
        }
    }

    结果:

    1 欢迎来买香蕉
    2 欢迎来买苹果

    工厂方法模式,是最标准的一种工厂模式,也是应用广泛的一种模式。 But 工厂模式有一个很大的缺点:

    • 就是,如果增加了一款产品,比如是Lenovo 那么你就需要为lenovo创建一个工厂类。
    • 一个具体工厂只能创建一种具体产品。
    • 系统类的个数将成对增加,在一定程度上增加了系统的复杂度;同时,有更多的类需要编译和运行,会给系统带来一些额外的开销。

    代码示例地址:https://github.com/oukele/methodFactory

  • 相关阅读:
    基础算法:求目标值 &字符串反转
    算法计算出股票最佳交易时间点
    Python 设计模式—命令模式
    Python 设计模式—代理模式
    有趣的算法题~单调栈
    令人头大的字符串—算法处理
    WebUI 自动化测试的经典设计模式:PO
    双指针—滑动窗口算法解析
    Python 设计模式—观察者模式
    多线程之读写锁原理
  • 原文地址:https://www.cnblogs.com/oukele/p/10097046.html
Copyright © 2011-2022 走看看