简单工厂模式

工厂模式

抽象动物:

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
相关推荐
山岚的运维笔记14 小时前
Bash 专业人员笔记 -- 第 11 章:`true`、`false` 和 `:` 命令
linux·运维·服务器·开发语言·笔记·学习·bash
代钦塔拉14 小时前
第一篇:字符编码全解:从ASCII/GBK/Unicode到UTF-8
开发语言·qt
Generalzy14 小时前
为什么 Go 的注释,能控制编译器?
java·python·golang
syagain_zsx14 小时前
Qt初识,快速上手
开发语言·qt
Wy_编程14 小时前
go语言面向对象和异常处理
开发语言·后端·golang
进击的荆棘14 小时前
C++起始之路——C++11(下)
开发语言·c++·c++11·lambda
Galsk14 小时前
Linux零拷贝
java·linux·服务器·面试
许长安14 小时前
C++ 原子变量与内存序:从std::atomic到release/acquire
开发语言·数据结构·c++·经验分享·笔记
不知名的忻14 小时前
归并排序(Java)
java·算法·排序算法
逆境不可逃15 小时前
一篇速通互联网架构的不断升级过程:从单机到云原生
java·elasticsearch·搜索引擎·云原生·架构