简单工厂模式

工厂模式

抽象动物:

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
相关推荐
妙蛙种子311几秒前
【Java八股 |JUC并发编程类】线程
java·开发语言·后端·多线程·八股
qq_33490315几秒前
C++中的装饰器模式高级应用
开发语言·c++·算法
灰色小旋风2 分钟前
力扣14 最长公共前缀(C++)
java·数据结构·算法
枫叶丹42 分钟前
【HarmonyOS 6.0】Network Kit 深度解析:TLS 认证全面支持国密证书
开发语言·网络安全·华为·harmonyos
2401_851272992 分钟前
编译器内建函数使用
开发语言·c++·算法
魑-魅-魍-魉2 分钟前
Maven + Nexus 连接被拒绝问题速查手册
java·maven
caimouse3 分钟前
Node.js的http服务
开发语言
不会写DN4 分钟前
[特殊字符] JS Date 对象8大使用场景
开发语言·前端·javascript
蓝天星空4 分钟前
java、python、C# 编程语言的区别,不同开发语言平台对比有什么优势和缺点
java·开发语言·python
骇客野人6 分钟前
XXL-JOB集成到springBoot手册
java·数据库·spring boot