zoukankan      html  css  js  c++  java
  • 工厂方法模式

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


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


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

    工厂方法模式-》为每种类型的对象的创建都交给该类型对应的工厂,也就是说一种类型对应一个该类型具体的工厂,例如:要创建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图:

    不能只满足于写完代码运行结果正确就完事,时常考虑如何让代码更加简练更加容易维护、容易扩展和复用,只有这样才可以真正得到提高 --《来自大话设计模式》
  • 相关阅读:
    python接口测试3-JSON格式
    python接口测试2-开发WEB接口
    接口测试1-基础
    Apifox接口测试管理工具
    python的pip安装超时问题解决
    ubuntu解决安装速度问题
    vim进入粘贴模式
    禅道数据库
    内存管理
    文件操作
  • 原文地址:https://www.cnblogs.com/lixianyuan-org/p/9439702.html
Copyright © 2011-2022 走看看