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图:

    不能只满足于写完代码运行结果正确就完事,时常考虑如何让代码更加简练更加容易维护、容易扩展和复用,只有这样才可以真正得到提高 --《来自大话设计模式》
  • 相关阅读:
    idea设置全局ignore
    win 2012 安装mysql 5.7.20 及报错 This application requires Visual Studio 2013 Redistributable. Please ins
    win 2012 安装mysql 5.7.20 及报错 This application requires Visual Studio 2013 Redistr
    kafka 删除 topic
    java编译中出现了Exception in thread “main" java.lang.UnsupportedClassVersionError
    Centos中使用yum安装java时,没有jps的问题的解决
    Spring 整合Junit
    Spring纯注解配置
    Spring 基于注解的 IOC 配置
    打印java系统的信息
  • 原文地址:https://www.cnblogs.com/lixianyuan-org/p/9439702.html
Copyright © 2011-2022 走看看