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

  • 相关阅读:
    LightOj1054
    LightOj1028
    Docker仓库(转载)
    Dockerfile(转载)
    Docker存储卷(转载)
    容器虚拟化网络和Docker容器网络(转载)
    Docker镜像管理基础(转载)
    Docker基础用法(转载)
    docker容器技术基础入门(转载)
    Redis 3种安装部署方式
  • 原文地址:https://www.cnblogs.com/oukele/p/10097046.html
Copyright © 2011-2022 走看看