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

  模式意图

  工厂方法在MVC中应用的很广泛。

  工厂方法意在分离产品与创建的两个层次,使用户在一个工厂池中可以选择自己想要使用的产品,而忽略其创建过程。

  简单来说,就像一个大型的工厂,对于消费者来说,只需要知道都有什么工厂的产品生产出来,而不需要关心工厂是如何生产产品的。对于工厂来说,必须知道所有的产品的制造方法。

  模式结构

  Creator 创建工厂的接口

  ConcreteCreator 具体的产品创建者

  Product 产品的接口

  ConcreteProduct 具体的产品

  适合场景

  1 当一个类不知道它所必须创建的对象的类的时候。

  2 当一个类希望由他的子类来制定它所创建的对象的时候

  3 当类创建对象的职责委托给多个帮助子类中的某一个,并且希望进行一些信息的局部初始化的时候。

  代码结构

  工厂方法需要一个工厂接口,提供了基本的类模式,和一个产品接口,提供基本的方法。

1 interface Creator{
2     public Product factory();
3 }
4 interface Product{
5     public void Say();
6 }

  接下来就是具体的工厂方法,可以创建不同的产品。

 1 class ConcreteCreator1 implements Creator{
 2     public Product factory() {
 3         return new ConcreteProduct1();
 4     }
 5 }
 6 class ConcreteCreator2 implements Creator{
 7     public Product factory() {
 8         return new ConcreteProduct2();
 9     }
10 }

  其次需要不同的产品。

 1 class ConcreteProduct1 implements Product{
 2     public void Say() {
 3         System.out.println("ConcreteProduct1");
 4     }
 5 }
 6 class ConcreteProduct2 implements Product{
 7     public void Say() {
 8         System.out.println("ConcreteProduct2");
 9     }
10 }

  使用方法,大致如下

 1 public class test {
 2     public static Creator creator1,creator2;
 3     public static Product product1,product2;
 4     public static void main(String[] args){
 5         creator1 = new ConcreteCreator1();
 6         creator2 = new ConcreteCreator2();
 7
 8         product1 = creator1.factory();
 9         product2 = creator2.factory();
10
11         product1.Say();
12         product2.Say();
13     }
14 }

  生活中的设计模式

  

  目前的生活,是一种快餐的生活。有时候不想做饭,去饭店也等不及,肯德基、麦当劳、德克士就成为了一种很方便的方式。

  我们去肯德基,通常会吃点汉堡,点点可乐,不需要知道这些东西是怎么做出来的,直接点,拿到吃,简单方便,这就是生活中的快餐工厂。

  通过一个MakeChoice方法,可以统一的进行选择。

interface KFC {
    public Client working();
}

interface Client {
    public void eating();
}

class Bread_Menu implements KFC {
    public Client working() {
        return new Client_Bread();
    }
}

class Cola_Menu implements KFC {
    public Client working() {
        return new Client_Cola();
    }
}

class Client_Bread implements Client {
    public void eating() {
        System.out.println("顾客 吃面包");
    }
}

class Client_Cola implements Client {
    public void eating() {
        System.out.println("顾客 喝可乐");
    }
}

public class FactoryMethodTest {
    public static KFC waiter;
    public static Client client1,client2;

    public static KFC MakeChoice(KFC maker){
        if(maker instanceof Bread_Menu){
            return new Bread_Menu();
        }else{
            return new Cola_Menu();
        }
    }

    public static void main(String[] args){

        System.out.println("-------------想吃面包-----------------");
        waiter = MakeChoice(new Bread_Menu());
        client1= waiter.working();
        client1.eating();

        System.out.println("-------------想喝可乐-----------------");
        waiter = MakeChoice(new Cola_Menu());
        client2 = waiter.working();
        client2.eating();
    }
}

  执行如下

-------------想吃面包-----------------
顾客 吃面包
-------------想喝可乐-----------------
顾客 喝可乐

 

本文转自博客园xingoo的博客,原文链接:【设计模式】——工厂方法FactoryMethod,如需转载请自行联系原博主。

时间: 2025-01-27 03:32:01

【设计模式】——工厂方法FactoryMethod的相关文章

PHP设计模式——工厂方法

  声明:本系列博客参考资料<大话设计模式>,作者程杰.              前面我们介绍了简单工厂,今天我们继续学习另外一个工厂--工厂方法.            具体案例:请MM去麦当劳吃汉堡,不同的MM有不同的口味,要每个都记住是一件烦人的事情,我们一般采用FactoryMethod模式,带着MM到服务员那儿,说"要一个汉堡",具体要什么样的汉堡呢,让MM直接跟服务员说就行了.         工厂方法模式核心工厂类不再负责所有产品的创建,而是将具体创建的工作

.NET设计模式-工厂方法模式(Factory Method)

工厂方法模式(Factory Method) --.NET设计模式系列之五 Terrylee,2004年1月2日 概述 在软件系统中,经常面临着"某个对象"的创建工作,由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口.如何应对这种变化?提供一种封装机制来隔离出"这个易变对象"的变化,从而保持系统中"其它依赖该对象的对象"不随着需求的改变而改变?这就是要说的Factory Method模式了. 意图 定义一个用户创

跟屌丝大哥学习设计模式--工厂方法模式

东汉<风俗通>记录了一则神话故事:"开天辟辟,未有人民,女娲搏,黄土作人--",讲述的内容就是大家非常熟悉的女娲造人的故事.开天辟地之初,大地上并没有生物,只有苍茫大地,纯粹而洁净的自然环境,寂静而又寂寞,于是女娲决定创造一个新物种(即人类)来增加世界的繁荣,怎么制造呢?       别忘了女娲是神仙,没有办不到的事情,造人的过程是这样的:首先,女娲采集黄土捏成人的形状,然后放到八卦炉中烧制,最后放置到大地上生长,工艺过程是没有错的,但是意外随时都会发生:       第一

炒冷饭系列:设计模式 工厂方法模式

一.什么是工厂方法模式 工厂方法模式同样属于类的创建型模式又被称 为多态工厂模式 .工厂方法模式的意义是定义一个创建 产品对象的工厂接口,将实际创建工作推迟到子类当中. 核心工厂类不再负责产品的创建,这样核心类成为一个 抽象工厂角色,仅负责具体工厂子类必须实现的接口, 这样进一步抽象化的好处是使得工厂方法模式可以使系 统在不修改具体工厂角色的情况下引进新的产品. 二.模式中包含的角色及其职责 1.抽象工厂(Creator)角色 工厂方法模式的核心,任何工厂类都必须实现这个接口. 2.具体工厂(

工厂方法(FactoryMethod)模式

为创建对象定义一个接口,让子类决定实例化哪个类.工厂方法让一个类的实例化延迟至子类. public interface Factory{ Product createproduct(); }//Factory接口定义了createproduct()方法来返回Product类型的实例对象, //ConcreateFactory实现了该方法,每次调用都会实例化一个新的ConcreateProduct返回 public class ConcreateFactory implements Factory

解读设计模式----工厂方法模式(FactoryMethod Pattern)

概述: Factory Method模式是应用最为广泛的设计模式,毕竟他负责了一系列对象的创建,而对象的创建正是面向对象编程中最为繁琐的行为.GOF在<设计模式>一书写到,"Factory Method模式使一个类的实例化延迟到子类."准确的说,Factory Method模式是将创建对象实例的责任,转移到了工厂类中,并利用抽象原理,将实例化行为延迟到具体工厂类. 意图: 定义一个用于创建对象的接口,让子类决定将哪一个类实例化.Factory Method模式使一个类的实例

举例解析设计模式中的工厂方法模式在C++编程中的运用_C 语言

工厂方法模式不同于简单工厂模式的地方在于工厂方法模式把对象的创建过程放到里子类里.这样工厂父对象和产品父对象一样,可以是抽象类或者接口,只定义相应的规范或操作,不涉及具体的创建或实现细节. 其类图如下: 实例代码为: #pragma once class IProduct { public: IProduct(void); virtual ~IProduct(void); }; #pragma once #include "iproduct.h" class IPad : public

Java设计模式编程之工厂方法模式的使用_java

定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类. 类型:创建类模式 类图: 工厂方法模式代码 interface IProduct { public void productMethod(); } class Product implements IProduct { public void productMethod() { System.out.println("产品"); } } interface IFactory { publ

Java使用设计模式中的工厂方法模式实例解析_java

工厂方法模式的定义工厂方法(Factory Method)模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中.核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品. 它包含了如下角色: 抽象产品(Product) 具体产品(ConcreteProduct) 抽象工厂(Factory) 具体工厂(ConcreteFactory) 模式的UML类