• 设计模式-工厂模式


    工厂模式

    Java中常用的设计模式,工厂可以说为我们提供产品的服务,主要方便我们创建对象。
    优点:灵活的控制生产过程,可扩展性高,在工厂中控制权限、添加日志、修饰。

    1.简单工厂模式

    1.创建一个抽象类或接口

    public interface Animal {
        public void eat();
    }
    
    
    • 1
    • 2
    • 3
    • 4

    2.创建具体类

    public class Cat implements Animal{
        @Override
        public void eat() {
            System.out.println("吃猫粮");
        }
    }
    
    public class Dog implements Animal{
        @Override
        public void eat() {
            System.out.println("吃狗粮");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    3.创建一个简单工厂类

    public class AnimalFactory {
        public Cat createCat(){
            return new Cat();
        }
    
        public Dog createDog(){
            return new Dog();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    3.工厂方法模式

    1.创建一个抽象类或接口

    public interface Animal {
        public void eat();
    }
    
    
    • 1
    • 2
    • 3
    • 4

    2.创建具体类

    public class Cat implements Animal{
        @Override
        public void eat() {
            System.out.println("吃猫粮");
        }
    }
    
    public class Dog implements Animal{
        @Override
        public void eat() {
            System.out.println("吃狗粮");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    3.创建工厂类

    public class CatFactory {
        public Cat createCat(){
            return new Cat();
        }
    }
    public class DogFactory {
        public Dog createDog(){
            return new Dog();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    缺点:
    类的数量增加:在工厂方法模式中,每个具体产品都对应一个具体工厂类。如果系统中存在大量的产品类型,就会导致产生大量的具体工厂类,增加了类的数量,使得系统更加复杂。

    客户端需要知道具体工厂类:在工厂方法模式中,客户端需要直接使用具体工厂类来创建产品对象。这使得客户端与具体工厂类之间产生了耦合,违背了依赖倒置原则。

    需要维护和管理工厂类:每个具体工厂类都需要负责创建对应的产品对象。如果有多个具体工厂类,就会增加维护和管理的复杂性。

    3.抽象工厂模式

    使用场景:当需要创建一组相关或相互依赖的产品对象时,可以使用抽象工厂模式。这些产品对象之间存在一定的逻辑关系,需要一起使用或者配合使用;当希望客户端与具体产品的实现解耦,只与抽象工厂和抽象产品进行交互时,可以使用抽象工厂模式。这样可以隐藏具体产品的实现细节,提供灵活的产品切换和扩展。

    1.定义抽象产品

    public interface IFood {
        public void eat();
    }
    public interface IHand {
        public void take();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2.定义具体产品

    class Food extends AbstractFood{
        @Override
        public void eat() {
            System.out.println("吃猫粮");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    public class Hand extends AbstracatHand{
        @Override
        public void take() {
            System.out.println("take ...");
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3.定义抽象工厂

    public abstract class ModelFactory {
        public abstract Food createFood();
        public abstract Hand createHand();
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4.定义具体工厂

    public class Factory extends ModelFactory{
        @Override
        public Food createFood() {
            return new Food();
        }
    
        @Override
        public Hand createHand() {
            return new Hand();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
  • 相关阅读:
    数组降维、函数栈帧、地址空间、可变参数原理剖析
    什么是代理IP池?真实测评IP代理商的IP池是否真实?
    方案设计|汽车轮胎数显胎压计方案
    分享一个自用的Win11护眼主题(无需下载)
    工厂模式【简单工厂+工厂+抽象工厂】总结
    Docker启动SpringBoot简单例子
    root用户自动安装mysql 5.7脚本
    RDD的转换Value类型map(func)案例_大数据培训
    【STM32】HAL库UART含校验位的串口通信配置BUG避坑
    Java dom4j如何获取,添加,删除,查找,设置Element属性呢?
  • 原文地址:https://blog.csdn.net/qq_52763385/article/details/132661160