设计模式-工厂模式

工厂模式

Java中常用的设计模式,工厂可以说为我们提供产品的服务,主要方便我们创建对象。

优点:灵活的控制生产过程,可扩展性高,在工厂中控制权限、添加日志、修饰。

1.简单工厂模式

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

java 复制代码
public interface Animal {
    public void eat();
}

2.创建具体类

java 复制代码
public class Cat implements Animal{
    @Override
    public void eat() {
        System.out.println("吃猫粮");
    }
}

public class Dog implements Animal{
    @Override
    public void eat() {
        System.out.println("吃狗粮");
    }
}

3.创建一个简单工厂类

java 复制代码
public class AnimalFactory {
    public Cat createCat(){
        return new Cat();
    }

    public Dog createDog(){
        return new Dog();
    }
}

3.工厂方法模式

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

java 复制代码
public interface Animal {
    public void eat();
}

2.创建具体类

java 复制代码
public class Cat implements Animal{
    @Override
    public void eat() {
        System.out.println("吃猫粮");
    }
}

public class Dog implements Animal{
    @Override
    public void eat() {
        System.out.println("吃狗粮");
    }
}

3.创建工厂类

java 复制代码
public class CatFactory {
    public Cat createCat(){
        return new Cat();
    }
}
public class DogFactory {
    public Dog createDog(){
        return new Dog();
    }
}

缺点:

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

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

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

3.抽象工厂模式

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

1.定义抽象产品

java 复制代码
public interface IFood {
    public void eat();
}
public interface IHand {
    public void take();
}

2.定义具体产品

java 复制代码
class Food extends AbstractFood{
    @Override
    public void eat() {
        System.out.println("吃猫粮");
    }
}
java 复制代码
public class Hand extends AbstracatHand{
    @Override
    public void take() {
        System.out.println("take ...");
    }
}

3.定义抽象工厂

java 复制代码
public abstract class ModelFactory {
    public abstract Food createFood();
    public abstract Hand createHand();
}

4.定义具体工厂

java 复制代码
public class Factory extends ModelFactory{
    @Override
    public Food createFood() {
        return new Food();
    }

    @Override
    public Hand createHand() {
        return new Hand();
    }
}
相关推荐
艺艺生辉1 小时前
从if-else到策略模式
后端·设计模式
小林ixn1 小时前
单例模式:从弹窗管理到全局状态,一个模式搞定
前端·javascript·设计模式
AI人工智能+电脑小能手3 小时前
大白话说Java设计模式-17-装饰器模式(源码剖析篇)
java·spring·设计模式·装饰器模式·源码分析·io流
workflower5 小时前
案例 :某交通厅基于AI技术的智能安全运营实践
网络·人工智能·安全·设计模式·机器人
AI人工智能+电脑小能手10 小时前
大白话说Java设计模式-16-装饰器模式(业务实战篇)
java·设计模式·装饰器模式·功能扩展·动态增强
workflower1 天前
例二:某汽车制造企业深度融合AI智能体,构建园区网络的智能运维体系
人工智能·机器学习·设计模式·机器人·云计算·汽车·制造
ly76891 天前
Java 设计模式详解:从原则到 23 种经典模式
java·开发语言·设计模式
AI人工智能+电脑小能手1 天前
大白话说Java设计模式-14-适配器模式(业务实战篇)
java·设计模式·适配器模式·系统兼容·多渠道对接
略略略咯咯2 天前
(总结)设计模式
设计模式
Cosolar2 天前
DeepSeek Harness 理解 Harness 的设计哲学 - 可组合的插件运行时
人工智能·设计模式·架构