简单工厂模式

工厂模式

抽象动物:

java 复制代码
public abstract class Animal {
    // 动物都要吃饭
    public abstract void eat();
}
java 复制代码
public class Cat extends Animal{
    @Override
    public void eat() {
        System.out.println("小猫吃猫粮");
    }
}
java 复制代码
public class Cat extends Animal{
    @Override
    public void eat() {
        System.out.println("小猫吃猫粮");
    }
}

抽象工厂:

java 复制代码
public abstract class AnimalFactory {
    public abstract Animal createAnimal();
}
java 复制代码
public class CatFacoty extends AnimalFactory{
    @Override
    public Animal createAnimal() {
        return new Cat();
    }
}
java 复制代码
public class DogFactory extends AnimalFactory{
    @Override
    public Animal createAnimal() {
        return new Dog();
    }
}
java 复制代码
public class FactoryTest {
    public static void main(String[] args) {
        AnimalFactory factory = new DogFactory();
        Animal animal = factory.createAnimal();
        animal.eat();

        AnimalFactory factory2 = new CatFacoty();
        Animal animal2 = factory2.createAnimal();
        animal2.eat();
    }
}

在这里,如果需要创建新的类,只需要新增animal的子类和factory的资料,不需要修改原来的代码,对扩展开放,符合开闭原则。

源码参考:

  • Collection.iterator
  • URLStreamHandler.createURLStreamHandler
相关推荐
JH3073几秒前
Java Spring中@AllArgsConstructor注解引发的依赖注入异常解决
java·开发语言·spring
码农水水12 分钟前
米哈游Java面试被问:机器学习模型的在线服务和A/B测试
java·开发语言·数据库·spring boot·后端·机器学习·word
2601_9495758621 分钟前
Flutter for OpenHarmony二手物品置换App实战 - 表单验证实现
android·java·flutter
C++ 老炮儿的技术栈1 小时前
C/C++ 中 inline(内联函数)和宏定义(#define)的区别
开发语言·c++·git·算法·机器人·visual studio
我什么都学不会1 小时前
Python练习作业2
开发语言·python
血小板要健康1 小时前
如何计算时间复杂度(上)
java·数据结构·算法
计算机学姐1 小时前
基于SpringBoot的美食分享交流平台
java·spring boot·后端·spring·java-ee·intellij-idea·美食
henujolly1 小时前
ethers.js读取合约信息
开发语言·javascript·区块链
Eugene__Chen1 小时前
Java关键字(曼波版)
java·开发语言
lixin5565562 小时前
基于深度生成对抗网络的高质量图像生成模型研究与实现
java·人工智能·pytorch·python·深度学习·语言模型