设计模式之工厂方法模式

目录

1.工厂方法模式概念

2.工厂方法组成部分

1)抽象工厂(Creator)

2)具体工厂(Concrete Creator)

3)抽象产品(Product)

4)具体产品(Concrete Product)

3.举个栗子:

4.代码实现

1)抽象产品

Animal 

2)具体产品

Cat

Fish

3)抽象工厂

AnimalFactory 

4)具体工厂

CatAnimalFactory 

 FishAnimalFactory 

4.测试代码:

FucFactoryMain 

5.运行结果

附录:

1)23种设计模式讲解地址

2)23种设计模式源码下载地址:


1.工厂方法模式概念

        当创建对象时,我们不会对构造类的对象进行实例化。这是通过为不同类型的对象调用一个公共的接口来完成的。

2.工厂方法组成部分

1)抽象工厂(Creator)

        声明一个用于创建产品的工厂方法。

2)具体工厂(Concrete Creator)

        实现抽象工厂中的工厂方法,用于创建一个具体产品对象。

3)抽象产品(Product)

        定义了产品的规范,即所有产品共有的公共接口。

4)具体产品(Concrete Product)

        由具体工厂创建,实现抽象产品接口。

3.举个栗子:

如下图:

注:对象的创建过程交给工厂了,我们负责使用,不直接和对象类打交道,而是和工厂打交道.

主要部分:

  1. Animal(动物):这是一个抽象产品类,定义了所有动物的公共接口。
  2. Cat(猫):实现Animal接口的具体产品类。
  3. Fish(鱼):实现Animal接口的具体产品类。
  4. AnimalFactory(动物工厂):这是一个抽象工厂类,定义了创建Animal对象的接口。
  5. CatAnimalFactory(猫动物工厂):实现AnimalFactory接口的具体工厂类,用于创建Cat对象。
  6. FishAnimalFactory(鱼动物工厂):实现AnimalFactory接口的具体工厂类,用于创建Fish对象。

工厂方法模式的使用流程:

  1. AnimalFactory创建一个Animal对象,并调用其shout()方法。
  2. CatAnimalFactory创建一个Cat对象,并调用其shout()方法。
  3. FishAnimalFactory创建一个Fish对象,并调用其shout()方法。

        通过这种方式,客户端可以通过调用工厂方法来获取具体的产品对象,而无需关心这些对象的具体实现。这种模式使得系统更容易扩展,因为可以添加新的工厂和产品类,而不会影响到现有的代码。

4.代码实现

1)抽象产品

Animal 

package org.xiji.fucFactory;

/**
 * 动物抽象接口
 */
public interface Animal {

    /**
     * 动物叫声
     */
    void shout();
}

        这段代码定义了一个叫做 Animal 的接口。这个接口是用来描述所有动物共有的行为。在这个接口中,我们定义了一个方法 shout,表示动物会发出叫声。具体来说:
        · 接口:Animal 是一个接口,它描述了所有动物应该具备的行为。
        · 方法:shout 方法表示动物会发出叫声。这个方法没有参数,也不返回任何值。
        · 实现:任何实现了 Animal 接口的类都需要提供 shout 方法的具体实现。也就是说,每个具体的动物类需要定义它是怎么叫的。 

2)具体产品

Cat

        这段代码定义了一个具体的动物类 Cat,它实现了 Animal 接口。
        · 接口:Animal 是一个接口,它描述了所有动物应该具备的行为。在这个接口中,我们定义了一个shout 方法,表示动物会发出叫声。
        · 具体实现:Cat 类实现了 Animal 接口,并具体实现了 shout 方法。当调用 shout 方法时,它会输出 "猫:喵喵喵"。

package org.xiji.fucFactory;

public class Cat implements Animal{
    @Override
    public void shout() {
        System.out.println("猫:喵喵喵");
    }
}

Fish

        定义了一个具体的动物类 Fish,它实现了 Animal 接口。
        · 接口:Animal 是一个接口,它描述了所有动物应该具备的行为。在这个接口中,我们定义了一个 shout 方法,表示动物会发出叫声。
         · 具体实现:Fish 类实现了 Animal 接口,并具体实现了 shout 方法。当调用 shout 方法时,它会输出 "鱼: ········"。

package org.xiji.fucFactory;

/**
 * 鱼
 */
public class Fish implements Animal{
    @Override
    public void shout() {
        System.out.println("鱼:········");
    }
}

3)抽象工厂

AnimalFactory 

        这段代码定义了一个名为 AnimalFactory 的抽象类。

        · 抽象类:AnimalFactory 是一个抽象类,它定义了创建动物的基本行为。抽象类不能直接实例化,只能被继承。
        · 抽象方法:createAnimal 方法是一个抽象方法,表示创建一个动物对象。具体实现由子类提供。

package org.xiji.fucFactory;

/**
 * 定义动物工厂接口
 */
public abstract class AnimalFactory {

    /**
     *
     * 创建动物
     */
    public abstract Animal createAnimal();
}

4)具体工厂

CatAnimalFactory 

        这段代码定义了一个名为 CatAnimalFactory 的具体工厂类,它继承自 AnimalFactory。

        · 抽象类:AnimalFactory 是一个抽象类,它定义了创建动物的基本行为。抽象类不能直接实例化,只能被继承。
        · 抽象方法:createAnimal 方法是一个抽象方法,表示创建一个动物对象。具体实现由子类提供。
        · 具体实现类:CatAnimalFactory 类继承自 AnimalFactory,并重写了 createAnimal 方法,具体实现了创建猫的对象。

package org.xiji.fucFactory;

public class CatAnimalFactory extends AnimalFactory{
    @Override
    public Animal createAnimal() {
        return new Cat();
    }
}

 FishAnimalFactory 

        这段代码定义了一个名为 FishAnimalFactory 的具体工厂类,它继承自 AnimalFactory。

        · 抽象类:AnimalFactory 是一个抽象类,它定义了创建动物的基本行为。抽象类不能直接实例化,只能被继承。
        · 抽象方法:createAnimal 方法是一个抽象方法,表示创建一个动物对象。具体实现由子类提供。
        · 具体实现类:FishAnimalFactory 类继承自 AnimalFactory,并重写了 createAnimal 方法,具体实现了创建鱼的对象。

package org.xiji.fucFactory;

public class FishAnimalFactory extends AnimalFactory{
    @Override
    public Animal createAnimal() {
        return new Fish();
    }
}

4.测试代码:

FucFactoryMain 

        这段代码定义了一个测试类 FucFactoryMain,用于展示如何使用具体的工厂类来创建动物对象,并让它们发出叫声。:
        · 抽象类:AnimalFactory 是一个抽象类,它定义了创建动物的基本行为。抽象类不能直接实例化,只能被继承。
        · 抽象方法:createAnimal 方法是一个抽象方法,表示创建一个动物对象。具体实现由子类提供。
        · 具体实现类:
                · CatAnimalFactory 类继承自 AnimalFactory,并重写了 createAnimal 方法,具体实现了创建猫的对象。
        · FishAnimalFactory 类继承自 AnimalFactory,并重写了 createAnimal 方法,具体实现了创建鱼的对象。
        · 测试类:FucFactoryMain 类用于测试具体的工厂类和动物类。在 main 方法中,我们创建了 CatAnimalFactory 和 FishAnimalFactory 对象,并通过它们创建具体的动物对象。最后调用 shout 方法让动物发出叫声。

package org.xiji.fucFactory;

/**
 * 方法工厂模式测试类
 */
public class FucFactoryMain {
    public static void main(String[] args) {
        /**
         * 想要一直猫
         *
         *   猫工厂=====>猫===》叫
         */
        AnimalFactory animalFactory = new CatAnimalFactory();
        Animal cat = animalFactory.createAnimal();
        cat.shout();

        /**
         * 想要一只鱼
         */
        AnimalFactory animalFactory1 = new FishAnimalFactory();
        Animal fish = animalFactory1.createAnimal();
        fish.shout();

    }
}

5.运行结果

附录:

1)23种设计模式讲解地址

23种设计模式讲解地址

专题地址:https://blog.csdn.net/2301_76862031/category_12779841.html


 设计模式之访问者模式地址:  https://blog.csdn.net/2301_76862031/article/details/141716629

 设计模式之简单工厂模式地址: https://blog.csdn.net/2301_76862031/article/details/141641161
 设计模式之策略模式工厂地址:https://blog.csdn.net/2301_76862031/article/details/141647304

设计模式之备忘录模式地址:     https://blog.csdn.net/2301_76862031/article/details/141678153
 
 设计模式之代理模式: https://blog.csdn.net/2301_76862031/article/details/141681834
 
 设计模式之单例模式: https://blog.csdn.net/2301_76862031/article/details/141684340
 
 设计模式之迭代器模式: https://blog.csdn.net/2301_76862031/article/details/141690379
 
 设计模式之观察者模式:https://blog.csdn.net/2301_76862031/article/details/141723684
 
 设计模式之命令模式: https://blog.csdn.net/2301_76862031/article/details/141728371
 
 设计模式之模板方法模式: https://blog.csdn.net/2301_76862031/article/details/141729898
 
 设计模式之桥接模式: https://blog.csdn.net/2301_76862031/article/details/141748997
 
 设计模式之适配器模式: https://blog.csdn.net/2301_76862031/article/details/141752130
 
 设计模式之外观模式: https://blog.csdn.net/2301_76862031/article/details/141753019

设计模式之享元模式: https://blog.csdn.net/2301_76862031/article/details/141755905
 
 设计模式之原型模式: https://blog.csdn.net/2301_76862031/article/details/141759296
 
 设计模式之责任链模式: https://blog.csdn.net/2301_76862031/article/details/141760704

 设计模式之中介模式: https://blog.csdn.net/2301_76862031/article/details/141777728
 
 设计模式之装饰者模式: https://blog.csdn.net/2301_76862031/article/details/141784167
 
 设计模式之状态模式: https://blog.csdn.net/2301_76862031/article/details/141786766
 
 设计模式之组合模式: https://blog.csdn.net/2301_76862031/article/details/141787708
 
 设计模式之工厂方法模式: https://blog.csdn.net/2301_76862031/article/details/141826862
 
 设计模式之解释器模式: https://blog.csdn.net/2301_76862031/article/details/141859953
 

2)23种设计模式源码下载地址:

java23种设计模式的实现代码(): 23种设计模式的实现使用java,并且均已经通过测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值