简单工厂模式

工厂模式

抽象动物:

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
相关推荐
heartbeat..11 小时前
介绍一下软件开发中常见的几种的架构模式
java·架构·开发
天天摸鱼的小学生11 小时前
【Java Enum枚举】
java·开发语言
阿猿收手吧!11 小时前
【C++】cpp虚函数和纯虚函数的声明和定义
开发语言·c++
q_302381955611 小时前
Python实现基于多模态知识图谱的中医智能辅助诊疗系统:迈向智慧中医的新篇章
开发语言·python·知识图谱
爬山算法11 小时前
Redis(168) 如何使用Redis实现会话管理?
java·数据库·redis
程语有云11 小时前
生产事故-那些年遇到过的OOM
java·内存·oom·生产事故
雨中飘荡的记忆11 小时前
Spring Test详解
java·后端·spring
梨落秋霜11 小时前
Python入门篇【输入input】
开发语言·python
wen-pan11 小时前
Go 语言 GMP 调度模型深度解析
开发语言·go