• 工厂方法模式


      工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法是一个类的实例化延迟到其子类。


      工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行。你想要加功能,本来是改工厂类的,而现在是修改客户端!


      工厂方法克服了简单工厂违背开-闭原则的缺点,有保持了封装对象创建过程的优点。但缺点是由于每加一个产品,就需要加一个产品工厂的类,增加了额外的开发量。 

    工厂方法模式-》为每种类型的对象的创建都交给该类型对应的工厂,也就是说一种类型对应一个该类型具体的工厂,例如:要创建Dog,就使用Dog的工厂来创建Dog;要创建Cat,就使用Cat的工厂来创建。

      用于创建的对象种类比较多的情况下,扩展性相对于简单工厂模式要好,扩展的时候不需要改动原先的代码,想要扩展一种动物,只需要扩展对应的工厂类。

    1 public abstract class Animal {
    2     public abstract void sayHello();
    3 }
    1 public class Cat extends Animal{
    2     @Override
    3     public void sayHello() {
    4         System.out.println("hello,我是猫");
    5     }
    6 }
    1 public class Dog extends Animal{
    2     @Override
    3     public void sayHello() {
    4         System.out.println("hello,我是哈士奇");
    5     }
    6 
    7 }
    1 //工厂
    2 public interface Factory {
    3     public abstract Animal createAnimal();
    4 }
    1 public class DogFactory implements Factory{
    2     @Override
    3     public Animal createAnimal() {
    4         return new Dog();
    5     }
    6 
    7 }
    1 public class CatFactory implements Factory {
    2     @Override
    3     public Animal createAnimal() {
    4         
    5         return new Cat();
    6     }
    7     
    8 }

    测试类:

    1 public class AnimalTest {
    2     public static void main(String[] args) {
    3         // 需求:找只猫
    4         Factory f = new CatFactory();
    5         // 上溯造型
    6         Animal animal = f.createAnimal();
    7         animal.sayHello();
    8     }
    9 }

    UML图:

    不能只满足于写完代码运行结果正确就完事,时常考虑如何让代码更加简练更加容易维护、容易扩展和复用,只有这样才可以真正得到提高 --《来自大话设计模式》
  • 相关阅读:
    java.util.concurrent学习
    mysql慢查优化总结
    mysql怎么限制某些查询语句的执行?
    数据库操作提交事务如果不关闭,会有什么样的后果?
    apache的500错误是写到哪个文件里面
    apache也可以做负载均衡,跟nignx的区别是什么?
    ajax提交请求为啥url要用这个函数encodeURI
    MySQL性能调优与架构设计读书笔记
    java枚举的作用
    linux的命令
  • 原文地址:https://www.cnblogs.com/lixianyuan-org/p/9439702.html
Copyright © 2020-2023  润新知