创建型设计模式(一)工厂方法模式

一、一句话背景

我需要一辆汽车,那我可以直接从工厂里面提货,而不用去管汽车是怎么做出来的,以及生产汽车的具体实现,我只需要告诉这个工厂要生产什么品牌的汽车就好,具体的汽车生产流水线我也不用管。

二、使用场景

知道部分特性而创建具体对象的场景。

如:根据环境类型(dev,test或master等)直接调用一整套环境配置

三、模型分析

生产流水线:接口,定义了生产汽车的方法

具体产品的生产流水线:类,里面的方法帮我们创建具体的类对象(汽车),生产流水线接口的具体实现

工厂:类,需要根据客户需求调用不同的流水线来生产汽车

四、代码分析

生产流水线

/**
 * 创建一个生产流水线接口,定义生产汽车的方法
 */
public interface CarProductionLine {
    //生产汽车的方法
    void produceCar();
}

各个品牌汽车的生产流水线(具体产品的生产流水线)

/**
 * 宝马车生产流水线
 */
public class BmwProductionLine implements CarProductionLine {

    @Override
    public void produceCar() {
        //实现生产流水线接口定义的方法,生产宝马车
        System.out.println("整台宝马来开~");
    }
}
/**
 * 奔驰车生产流水线
 */
public class BenzProductionLine implements CarProductionLine {

    @Override
    public void produceCar() {
        //实现生产流水线接口定义的方法,生产奔驰车
        System.out.println("整台奔驰来开~");
    }
}
/**
 * 奥迪车生产流水线
 */
public class AudiProductionLine implements CarProductionLine {

    @Override
    public void produceCar() {
        //实现生产流水线接口定义的方法,生产奥迪车
        System.out.println("整台奥迪来开~");
    }
}

工厂

/**
 * 汽车生产工厂
 */
public class CarFactory {

    //使用 getCar 方法调用不同的生产线
    public CarProductionLine getCar(String carBrand) {
        if (carBrand == null) {
            return null;
        }
        if (carBrand.equalsIgnoreCase("bmw")) {
            return new BmwProductionLine();
        } else if (carBrand.equalsIgnoreCase("benz")) {
            return new BenzProductionLine();
        } else if (carBrand.equalsIgnoreCase("audi")) {
            return new AudiProductionLine();
        }
        return null;
    }

}

客户下单

public class ConsumerOrderDemo {

   public static void main(String[] args) {
      CarFactory carFactory = new CarFactory();

      //客户要买宝马,工厂获取 BmwProductionLine 的对象,并调用它的 getCar 方法
      ProductionLine bmwProductionLine = carFactory.getCar("bmw");

      //调用 BmwProductionLine 的 produceCar 方法
      bmwProductionLine.produceCar();
    //客户要买奔驰,工厂获取 BenzProductionLine 的对象,并调用它的 getCar 方法
     ProductionLine benzProductionLine = carFactory.getCar("benz");

      //调用 BenzProductionLine 的 produceCar 方法
      benzProductionLine.produceCar();

      //客户要买奥迪,工厂获取 AudiProductionLine 的对象,并调用它的 getCar 方法
      ProductionLine audiProductionLine = carFactory.getCar("audi");

      //调用 AudiProductionLine 的 produceCar 方法
      audiProductionLine.produceCar();
} }

原文地址:https://www.cnblogs.com/riches/p/11198488.html

时间: 2024-11-09 03:47:55

创建型设计模式(一)工厂方法模式的相关文章

设计模式之工厂方法模式

anticipate 预料 = except ant蚂蚁 ic ic卡 ip ip卡 ate吃 我没有预料到小蚂蚁把我的ic,ip卡吃掉了. robust 强壮的 = strong ro rong容祖儿  bu不  st石头 容祖儿不喜欢强壮的石头. maintain 维持 = keep main主要的(大陆)  tain 台湾 大陆和台湾维持着若即若离的关系. 设计模式之工厂方法模式 动机:     一个工厂方法factory method定义了一个接口来创建对象,但是让子类去选择创建哪一个,

每天一个设计模式-5 工厂方法模式

每天一个设计模式-5 工厂方法模式 1.模式定义 定义一个用于创建对象的接口,让子类决定实例化那一个类,Factory Method使一个类的实例化延迟到其子类. 2.工厂方法模式解决问题的思路 工厂方法模式需要接口对象,那就定义一个方法来创建这个接口对象(工厂方法):可是事实上它自己是不知道如何创建这个接口对象的,没有关系,定义成抽象方法让子类来实现就可以了:这样这个对象本身就可以只是面向接口编程,而无需关心到底如何创建接口对象了. 3.实际问题 实现一个导出数据的功能,客户选择数据的导出格式

C#设计模式(3)——工厂方法模式

一.概念:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类. 二.代码实现 namespace 设计模式之工厂方法模式 { /// <summary> /// 菜抽象类 /// </summary> public abstract class Food { // 输出点了什么菜 public abstract void Print(); } /// <summary> /// 西红柿炒鸡蛋这道菜 /// </summary

03.设计模式_工厂方法模式

转载自:http://www.cnblogs.com/zhili/p/FactoryMethod.html 一.引言 在简单工厂模式中讲到简单工厂模式的缺点,有一点是--简单工厂模式系统难以扩展,一旦添加新产品就不得不修改简单工厂方法,这样就会造成简单工厂的实现逻辑过于复杂,然而本专题介绍的工厂方法模式可以解决简单工厂模式中存在的这个问题,下面就具体看看工厂模式是如何解决该问题的. 二.工厂方法模式的实现 工厂方法模式之所以可以解决简单工厂的模式,是因为它的实现把具体产品的创建推迟到子类中,此时

Java设计模式之工厂方法模式(转) 实现是抽象工厂?

Java设计模式之工厂方法模式 责任编辑:覃里作者:Java研究组织   2009-02-25   来源:IT168网站 文本Tag: 设计模式 Java [IT168 技术文章]          一 .工厂方法(Factory Method)模式 工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中.核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色

【设计模式】——工厂方法模式

工厂方法模式(Factory Method),定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使用一个类的实例化延迟到其子类.根据依赖倒转原则,我们把工厂类抽象出一个接口,这个接口只有一个方法,就是创建抽象产品的工厂方法.然后,所有的要生产具体类的工厂,就去实现这个接口,这样,一个简单工厂模式的工厂类,变成了一个工厂抽象接口和多个具体生成对象的工厂.我们在要增加新的功能,就不需要更改原有的工厂类了,只需要增加此功能的运算类和相应的工厂类就可以了.这样整个工厂和产品系其实都没有修改的

【大话设计模式】—— 工厂方法模式

一.概念 想象一下我们的寻常见到的工厂,下一个订单,付了订金,一段时间后就能够提货.我们不须要知道工厂是用的什么机器,怎么安排工人的,从哪来的材料,只须要一个订单就好,工厂就能够依照其固定流水线做出我们所须要的产品.设计模式中也有类似的一个大神:工厂方法模式. 以下让我们来认识一下: 工厂方法模式(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 二.UML图 Product(抽象产品) ConcreteProduct(

设计模式:工厂方法模式(Factory method)

一.问题 在前一章中通过披萨的实例介绍了简单工厂模式.在披萨实例中,如果我想根据地域的不同生产出不同口味的披萨,如纽约口味披萨,芝加哥口味披萨.如果利用简单工厂模式,我们需要两个不同的工厂,NYPizzaFactory.ChicagoPizzaFactory.在该地域中有很多的披萨店,他们并不想依照总店的制作流程来生成披萨,而是希望采用他们自己的制作流程.这个时候如果还使用简单工厂模式,因为简单工厂模式是将披萨的制作流程完全承包了.那么怎么办? 二.解决方案 我们可以这样解决:将披萨的制作方法交

java语言实现创建型设计模式—抽象工厂模式

一.描述 抽象工厂模式是在工厂方法的模式上进一步抽象而来,如果说工厂方法模式是对一个产品结构的创建而言的话,那么抽象工厂模式则是针对多个产品结构而言的,它被用来一次创建多个不同的产品对象. 我们要创建一个摩托车轮胎和摩托车把手,又要创建一个自行车轮胎和自行车把手,如果我们使用工厂方法模式的话我们需要四个类:创建摩托车轮胎的工厂类,创建摩托车把手的工厂类,创建自行车轮胎的工厂类和创建自行车把手的工厂类,但是如果我们使用抽象工厂方法的话,我们需要创建两个工厂类:创建摩托车轮胎和把手的工厂类,创建自行

设计模式:工厂方法模式(Factory Method)和抽象工厂模式(Abstact Factory)

?在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象. 在这些情况,新对象的建立就是一个 "过程",不仅是一个操作,像一部大机器中的一个齿轮传动. 分类 ?工厂模式主要是为创建对象提供过渡接口,以便将创建对象的