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

工厂方法模式(五)

时间:2023-06-17 21:06:32浏览次数:33  
标签:type make 披萨 模式 工厂 方法 public Pizza


过气的,终究是过气了

上一章简单介绍了工厂模式(四), 如果没有看过,请观看上一章

一.工厂方法模式

工厂方法模式,通过定义工厂父类负责定义创建对象的公共接口,而子类则负责生成具体的对象。

将类的实例化(具体产品的创建)延迟到工厂类的子类(具体工厂)中完成,即由子类来决定应该实例化(创建)哪一个类。

组成角色

具体

关系

作用

抽象产品(Product)

Pizza

具体产品的父类

描述具体产品的公共接口

具体产品(Concrete Product)

Chinese1,Eluosi1

抽象产品的子类;工厂类创建的目标类

描述生产的具体产品

抽象工厂(Creator)

AbsOrderPizzaFactory

具体工厂的父类

描述具体工厂的公共接口

具体工厂(Concrete Creator)

ChineseAbsOrderPizzaFactoryFactory 等

抽象工厂的子类;被外界调用

描述具体工厂;实现FactoryMethod工厂方法创建产品的实例

工厂方法模式(五)_父类

二. 实例讲解

二.一 定义抽象产品

public interface Pizza {
    void make();
}

二.二 定义具体的产品

二.二.一 中国蓝色披萨

@Slf4j
public class ChineseBluePizza implements Pizza{

    @Override
    public void make() {
        log.info("制作中国蓝色披萨");
    }
}

二.二. 二 中国红色披萨

@Slf4j
public class ChineseRedPizza implements Pizza{

    @Override
    public void make() {
        log.info("制作中国红披萨");
    }
}

二.二. 三 俄罗斯蓝色披萨

@Slf4j
public class EluosiBluePizza implements Pizza{

    @Override
    public void make() {
        log.info("制作俄罗斯蓝色披萨");
    }
}

二.二. 四 俄罗斯红色披萨

@Slf4j
public class EluosiRedPizza implements Pizza{

    @Override
    public void make() {
        log.info("制作俄罗斯红披萨");
    }
}

二.三 定义抽象工厂

public  interface AbsOrderPizzaFactory {
     public Pizza createPizaa (String type);
}

二.四 定义具体的工厂

二.四.一 中国的工厂

public class ChineseAbsOrderPizzaFactoryFactory implements AbsOrderPizzaFactory {

    @Override
    public Pizza createPizaa(String type) {
        if ("red".equalsIgnoreCase(type)){
            return new ChineseRedPizza();
        }else if ("blue".equalsIgnoreCase(type)){
            return new ChineseBluePizza();
        }else {
            return null;
        }
    }
}

二.四.二 俄罗斯的工厂

public class EluosiAbsOrderPizzaFactoryFactory implements AbsOrderPizzaFactory {

    @Override
    public Pizza createPizaa(String type) {
        if ("red".equalsIgnoreCase(type)){
            return new EluosiRedPizza();
        }else if ("blue".equalsIgnoreCase(type)){
            return new EluosiBluePizza();
        }else {
            return null;
        }
    }
}

二.五 客户端调用

@Test
    public void oneTest() {

        AbsOrderPizzaFactory absOrderPizzaFactory = new ChineseAbsOrderPizzaFactoryFactory();

        Pizza pizza = absOrderPizzaFactory.createPizaa("red");

        pizza.make();

        pizza = absOrderPizzaFactory.createPizaa("blue");
        pizza.make();

        absOrderPizzaFactory =   new EluosiAbsOrderPizzaFactoryFactory();

        pizza = absOrderPizzaFactory.createPizaa("red");

        pizza.make();
    }

工厂方法模式(五)_ide_02

二.六 新增加种类

如果现在新增加 美国的 蓝色 和红色 披萨, 那么不需要改变之前的东西, 只需要增加具体的产品和具体的工厂实现即可

二.六.一 新增加具体的产品

@Slf4j
public class MeiBluePizza implements Pizza{

    @Override
    public void make() {
        log.info("制作美国蓝色披萨");
    }
}
@Slf4j
public class MeiRedPizza implements Pizza{

    @Override
    public void make() {
        log.info("制作美国红披萨");
    }
}

二.六.二 新增加具体的工厂实现

public class MeiAbsOrderPizzaFactoryFactory implements AbsOrderPizzaFactory {

    @Override
    public Pizza createPizaa(String type) {
        if ("red".equalsIgnoreCase(type)){
            return new MeiRedPizza();
        }else if ("blue".equalsIgnoreCase(type)){
            return new MeiBluePizza();
        }else {
            return null;
        }
    }
}

二.六.三 客户端调用

@Test
    public void twoTest() {

        AbsOrderPizzaFactory absOrderPizzaFactory = new MeiAbsOrderPizzaFactoryFactory();

        Pizza pizza = absOrderPizzaFactory.createPizaa("red");

        pizza.make();

        pizza = absOrderPizzaFactory.createPizaa("blue");
        pizza.make();
        
    }

工厂方法模式(五)_设计模式_03

工厂方法不支持 产品族, 只是生成一个单一的对象实例


标签:type,make,披萨,模式,工厂,方法,public,Pizza
From: https://blog.51cto.com/yueshushu/6506191

相关文章

  • 设计模式的原则(一)
    相信自己,无论自己到了什么局面,请一定要继续相信自己。新的世界开始了,接下来,老蝴蝶带领大家学习一下设计模式。我们先了解一下设计原则一.设计模式一.一设计原则设计模式常用的七大原则:单一职责原则接口隔离原则依赖倒转(倒置)原则里氏替换原则开闭原则迪米特法则合成复用原则一.......
  • 策略模式(二十五)
    相信自己,请一定要相信自己上一章简单介绍了状态模式(二十四),如果没有看过,请观看上一章一.策略模式引用菜鸟教程里面策略模式介绍:https://www.runoob.com/design-pattern/strategy-pattern.html在策略模式(StrategyPattern)中,一个类的行为或其算法可以在运行时更改。这种类......
  • PHP开发:代码风格、重构和设计模式的实践
    一、代码风格和规范:采用一致的代码风格和规范有助于提高代码的可读性和可维护性。我们将介绍一些常见的PHP代码风格指南,如PSR-12(PHPStandardRecommendation),以及一些静态代码分析工具,如PHPCodeSniffer,可以帮助您自动检测代码规范问题。示例代码风格(使用PSR-12):<?phpnamespaceV......
  • 迭代器模式(Iterator Pattern)
    迭代器模式(IteratorPattern)一、定义提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露该对象的内部表示。二、优缺点优点: 1、它支持以不同的方式遍历一个聚合对象。2、迭代器简化了聚合类。3、在同一个聚合上可以有多个遍历。4、在迭代器模式中,增加新的聚合类和......
  • 请求被中止: 未能创建 SSL/TLS 安全通道,以及解决方法,即:Could not create SSL/TLS sec
    C#访问https请求被中止:未能创建SSL/TLS安全通道(CouldnotcreateSSL/TLSsecurechannel)以及X509Certificate2tempSignCert=newX509Certificate2(HttpContext.Current.Server.MapPath("cert/20050104.p12"),"123456");报:“System.Security.Cryptography.Cryp......
  • 一种证明勾股定理的方法
    我最近想到了一种新的证明勾股定理的方法考虑直角三角形\(ABC\),假设\(B\)是直角,\(AB=x,BC=y\),过\(B\)作\(AC\)的垂线交\(AC\)于\(H\),显然三角形\(ABH\),\(BHC\),\(ABC\)两两相似。所以\(\frac{AH}{BH}=\frac{AB}{BC}=\frac{a}{b}\)令\(AH=kx\),则\(BH=ky\),由射影定理可得\(BH^2=AH......
  • 设计模式:适配器模式(论如何把鼠头适配成鸭脖)
    适配器模式(AdapterPattern)有时候也称包装样式或者包装,是一种结构型设计模式,它可以将一个类的接口转换成客户端所期望的另一个接口。适配器模式可以让原本由于接口不兼容而不能一起工作的那些类可以一起工作。适配器模式有三种类型:类适配器模式、对象适配器模式和接口适配器模式......
  • java使double保留两位小数的多方法 java保留两位小数
    代码如下:mportjava.text.DecimalFormat;  DecimalFormat   df  =newDecimalFormat("######0.00");  doubled1=3.23456 doubled2=0.0;doubled3=2.0;df.format(d1);df.format(d2);df.format(d3);3个结果分别为:复制代码代码如下:3.230.002.00java保留两位小......
  • Go设计模式实战--用状态模式实现系统工作流和状态机
    大家好,这里是每周都在陪你进步的网管~!本节我们讲一个行为型的设计模式--状态模式,并通过Golang示例进行实战演示。状态模式(StatePattern)也叫作状态机模式(StateMachinePattern)状态模式允许对象的内部状态发生改变时,改变它的行为,就好像对象看起来修改了它实例化的类,状态模式是一种......
  • python 断言方法
    assertEqual(a,b):判断a和b是否相等。self.assertEqual(2+2,4)#通过self.assertEqual('hello','world')#失败,抛出AssertionErrorassertNotEqual(a,b):判断a和b是否不相等。self.assertNotEqual(2+2,5)#通过self.assertNotEqual('hello',�......