首页 > 其他分享 >工厂方法模式

工厂方法模式

时间:2023-08-06 16:01:40浏览次数:40  
标签:PizzaFactory 模式 工厂 IPizza static createPizza getPizzaName 方法 class

工厂方法模式

**工厂方法模式:**定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。

设计原则:

依赖倒置原则:要依赖抽象,不要依赖具体类。

下面的指导方针,能避免在OO设计原则中违反依赖倒置原则:

变量不可以持有具体的类的引用。

不要让类派生自具体类。

不要覆盖基类中已实现的方法。

package HeadFirstDesignMode.factory;

/**
 * 描述:工厂方法模式
 * Created by zjw on 2018-12-17 22:36
 */
public class FactoryMethodTest {

    public static void main(String[] args) {
        PizzaFactory nyPizzaFactory = new NYPizzaFactory();
        nyPizzaFactory.createPizza().getPizzaName();

        PizzaFactory chicagoPizzaFactory = new ChicagoPizzaFactory();
        chicagoPizzaFactory.createPizza().getPizzaName();
    }

    interface IPizza{
        void getPizzaName();
    }

    static class NYStylePizza implements IPizza{

        @Override
        public void getPizzaName() {
            System.out.println("我是纽约风味比萨 " + this.getClass().getSimpleName());
        }
    }
    static class ChicagoStylePizza implements IPizza {

        @Override
        public void getPizzaName() {
            System.out.println("我是芝加哥风味比萨 " + this.getClass().getSimpleName());
        }
    }
    
    //抽象工厂
    static abstract class PizzaFactory {
        abstract IPizza createPizza();
    }

    //具体工厂
    static class NYPizzaFactory extends PizzaFactory {

        @Override
        IPizza createPizza() {
            return new NYStylePizza();
        }
    }
    //具体工厂
    static class ChicagoPizzaFactory extends PizzaFactory {

        @Override
        IPizza createPizza() {
            return new ChicagoStylePizza();
        }
    }
}

标签:PizzaFactory,模式,工厂,IPizza,static,createPizza,getPizzaName,方法,class
From: https://blog.51cto.com/u_11906056/6984948

相关文章

  • 【Java】智慧工地管理系统源码(SaaS模式)
    智慧工地是聚焦工程施工现场,紧紧围绕人、机、料、法、环等关键要素,综合运用物联网、云计算、大数据、移动计算和智能设备等软硬件信息技术,与施工生产过程相融合。一、什么是智慧工地智慧工地是指利用移动互联、物联网、智能算法、地理信息系统、大数据挖掘分析等信息技术,提高项目......
  • OpenERP中生产领料、投料、损耗、退料、成品入库的操作方法
    1)OpenERP中生产订单MO的运行原理1.1)计算物料需求。在OpenERP中,MO确认时候(跑MRP的话,系统通常会自动确认),系统基于MO上的BoM表,计算需要的原料,并自动生成一张领料单(从MO上的源库位领料到MO上的Routing上定义的库位,通常是车间)。默认情况下(如果不装stock_no_autopicking模块的话),该领料......
  • 前端学习笔记202306学习笔记第三十八天-封装检测数据类型得方法1
      ......
  • BootstrapBlazor组件库更优雅的调用js方法
    BootstrapBlazor组件库更优雅的调用js方法在blazor开发中,有时候需要去调用js代码来处理一些逻辑。使用BootstrapBlazor组件库自带的JSModuleAutoLoader特性可以帮助我们更加方便、简洁的去调用js下面我们用Live2DDisplay这个组件为例我们首先在razor文件中继承接口@inheritsB......
  • Manjaro 常见坑及解决方法
    Manjaro常见坑及解决方法1.AUR清华源问题因为清华源现在移除了AUR镜像了,所以继续用清华的AUR源就可能出现下面的情况解决办法:yay--aururl"https://aur.archlinux.org"--save换回官方源,但上面那条代码有可能没用,因为我就是用上面那条代码并没有解决问题原因是:只更改......
  • "静态方法和实例方法" 这两种函数调用的区别
    来看两段代码第一段:publicclassRegexDemo{publicstaticvoidmain(String[]args){func();}privatestaticvoidfunc(){Stringinput="123456";booleanmatches=input.matches("\\d+");Syste......
  • ES6数组reduce方法使用
    reduce方法对数组中的每个元素执行一个reducer函数,将其减少为单个值。reduce的语法如下:letresult=arr.reduce(reducer,initialValue);reducer函数包含四个参数:accumulator-累计器,默认为initialValue的值,累计回调函数的返回值currentValue-数组中正在处理的元素......
  • openGauss学习笔记-32 openGauss 高级数据管理-批处理模式
    openGauss学习笔记-32openGauss高级数据管理-批处理模式openGauss支持从文本文件执行SQL语句。openGauss提供了gsql工具实现SQL语句的批量处理。以下场景建议使用批处理:如果您重复运行查询(例如,每天或每周),将其设为脚本可以让您避免每次进行重复输入。您可以通过复制和编辑脚......
  • 解决Redis缓存雪崩问题的有效方法
    Redis缓存雪崩是指在某个时间点,缓存中大量的数据同时过期失效,导致大量请求直接访问后端数据库,造成数据库压力激增,甚至导致系统崩溃。本文将介绍几种有效的方法,帮助您解决Redis缓存雪崩问题,提高系统的稳定性和可靠性。合理设置缓存的过期时间:缓存的过期时间是导致缓存雪崩的主要原......
  • 对线程join()方法的理解
    java线程的join()方法的理解thread.join()把指定的线程加入到当前线程,可以将两个交替执行的线程和并为顺序执行的线程。简单说就是同步。例1:比如在线程B中调用了线程A的join方法,直到线程A执行完毕后,才会继续执行线程B。例2:再比如我们做查询操作,总任务需要返回三个查询列......