zoukankan      html  css  js  c++  java
  • 大话设计模式之工厂方法模式读后感

    引言:让我们重温经典,致敬经典

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

    UML图:

     1 package com.dzf.designtest;
     2 
     3 /**
     4  * <desc>
     5  *     工厂方法:定义一个创建对象的接口,让子类来决定实例化哪一个类,工厂方法使一个类的实例延迟到子类。
     6  * </desc>
     7  * @author dingzf
     8  * @date 2018/4/1
     9  * @time 21:42
    10  */
    11 public class FactoryMethodDmeo {
    12     //客户端
    13     public static void main(String[] args) {
    14         ProductFactory productFactory = new ProductImplOneFactory();
    15         Product product = productFactory.getInstance();
    16         product.operation();
    17     }
    18 }
    19 
    20 abstract class Product {
    21     public abstract void operation();
    22 }
    23 
    24 class ProductImplOne extends Product {
    25     @Override
    26     public void operation() {
    27         System.out.println("我是产品1号");
    28     }
    29 }
    30 
    31 class ProductImplTwo extends Product {
    32     @Override
    33     public void operation() {
    34         System.out.println("我是产品2号");
    35     }
    36 }
    37 
    38 interface ProductFactory {
    39     //定义创建对象的接口,再子类中去实例化目标对像
    40     public Product getInstance();
    41 }
    42 class ProductImplOneFactory implements ProductFactory {
    43     //子类实例化目标对象
    44     @Override
    45     public Product getInstance() {
    46         return new ProductImplOne();
    47      }
    48 }
    49 class ProductImplTwoFactory implements ProductFactory{
    50     //子类实例化目标对象
    51     @Override
    52     public Product getInstance() {
    53         return new ProductImplTwo();
    54     }
    55 }

    解读:我们知道简单工厂模式和工厂方法模式很像,但是又不同。

    简单工厂最大的优点在于工厂类中包含了必要性的逻辑判断,根据客户端的选择动态的实例化对象,对于客户端来说,去除了和具体产品的依赖。但是我们增加功能的时候,是要改变工厂类中的逻辑判断的。这就违背了开放封闭原则。于是工厂方法就来了。记得在开放封闭原则那篇里说过,在刚开始的时候,我们不知道什么是会变的,很难预测,当类中的某些行为发生变化的时候,我们可以把这些抽象出来,防止以后发生同样的变化。工厂方法模式就是对这句话的诠释!

    工厂方法模式是简单工厂的进一步抽象,由于使用多态,保持了原有简单工厂的优点,而且客服了它的缺点,但是每增加一个产品,就需要增加一个与之相对应的工厂类,额外的增加了开发的工作量。有没有更两全齐美的办法呢,答案肯定是有的。不在本篇范围了,后面再说吧!

    工厂方法就先到这吧。

  • 相关阅读:
    MySQL数据库8(十九)外键
    MySQL数据库8(十八)用户权限管理
    HTML基本样式
    HTML5之部分新特性
    MySQL数据库8(十七)数据库的备份还原
    MySQL数据库8(十六)子查询
    MySQL数据库(十五)联合查询与连接查询
    MySQL数据库8(十四)聚合函数和运算符
    MySQL数据库8(十三)高级数据操作之select指令
    MySQL数据库8(十二)高级数据操作
  • 原文地址:https://www.cnblogs.com/zfding/p/8688626.html
Copyright © 2011-2022 走看看