【设计模式】——工厂方法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,如需转载请自行联系原博主。
相关文章
|
5月前
|
设计模式 开发者
探讨常见设计模式 - 工厂方法模式的最佳实践和潜在的实施问题
【4月更文挑战第7天】工厂方法模式是创建型设计模式,提供了一种在不指定具体类情况下创建对象的方式。它定义创建对象的接口,允许子类决定实例化哪个类,从而解耦对象的创建和使用。最佳实践包括明确接口、封装创建逻辑、提供扩展点和避免过度使用。然而,过度工程、违反开闭原则、性能影响和依赖管理是可能的问题。通过权衡利弊并遵循最佳实践,工厂方法模式能在适当场景下提升代码灵活性和可扩展性。
50 1
|
7天前
|
设计模式
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
这篇文章详细解释了工厂模式,包括简单工厂、工厂方法和抽象工厂三种类型。每种模式都通过代码示例展示了其应用场景和实现方法,并比较了它们之间的差异。简单工厂模式通过一个工厂类来创建各种产品;工厂方法模式通过定义一个创建对象的接口,由子类决定实例化哪个类;抽象工厂模式提供一个创建相关或依赖对象家族的接口,而不需要明确指定具体类。
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
|
8天前
|
设计模式 Java
Java设计模式-工厂方法模式(4)
Java设计模式-工厂方法模式(4)
|
2月前
|
设计模式 XML 存储
【二】设计模式~~~创建型模式~~~工厂方法模式(Java)
文章详细介绍了工厂方法模式(Factory Method Pattern),这是一种创建型设计模式,用于将对象的创建过程委托给多个工厂子类中的某一个,以实现对象创建的封装和扩展性。文章通过日志记录器的实例,展示了工厂方法模式的结构、角色、时序图、代码实现、优点、缺点以及适用环境,并探讨了如何通过配置文件和Java反射机制实现工厂的动态创建。
【二】设计模式~~~创建型模式~~~工厂方法模式(Java)
|
2月前
|
设计模式 uml
设计模式-------------工厂模式之工厂方法模式(创建型)
工厂方法模式是一种创建型设计模式,它通过定义一个用于创建对象的接口,让子类决定实例化哪一个类,从而实现类的实例化推迟到子类中进行,提高了系统的灵活性和可扩展性。
|
4月前
|
设计模式 Java
Java设计模式:工厂模式之简单工厂、工厂方法、抽象工厂(三)
Java设计模式:工厂模式之简单工厂、工厂方法、抽象工厂(三)
|
4月前
|
设计模式 搜索推荐
工厂方法模式-大话设计模式
工厂方法模式-大话设计模式
|
4月前
|
设计模式 新零售 Java
设计模式最佳套路5 —— 愉快地使用工厂方法模式
工厂模式一般配合策略模式一起使用,当系统中有多种产品(策略),且每种产品有多个实例时,此时适合使用工厂模式:每种产品对应的工厂提供该产品不同实例的创建功能,从而避免调用方和产品创建逻辑的耦合,完美符合迪米特法则(最少知道原则)。
71 6
|
4月前
|
设计模式 XML Java
【设计模式】第三篇:一篇搞定工厂模式【简单工厂、工厂方法模式、抽象工厂模式】
三 结尾 如果文章中有什么不足,欢迎大家留言交流,感谢朋友们的支持! 如果能帮到你的话,那就来关注我吧!如果您更喜欢微信文章的阅读方式,可以关注我的公众号
47 5
|
4月前
|
设计模式 Java 关系型数据库
设计模式第2弹:工厂方法模式
type ComputerProduct struct{} // 实现工厂方法 func (computer ComputerProduct) GetInformation() string { return "电脑,官方称呼计算机,主要用于进行数据运算的一台机器。" }
38 4