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

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

    简单工厂模式:根据调用端传参来有选择的实例化目标对象。

    UML类图:

    我们知道简单工厂就是为我们生成我们需要的对象。

    举个栗子:

    我们在舞台看表演的时候,一场场表演下来,我们可以总结个流程,舞台 表演1 ,表演2,表演3 。。。 结束。抽像为舞台 表演 结束。其实啊我们可以抽象为程序,有一个客户端,调用表演者的show方法,执行结束。关键不同的是,这个表演者的表演是不同的。

    这里我们就可以引入简单工厂了,抽象出来一个表演者工厂,需要什么样的表演,就创建具备这种技能类的对象。

    好比:需要唱歌,我们可以在表演者工厂里创建一个歌唱家这个类的对象,或者需要一个舞蹈表演,我们可以在表演者工厂里创建一个舞蹈家这个类的对象。

    这些歌唱家、舞蹈家、码农啊我们可以把他们提取出来,来一个技能者,他们都是有技能的,再给他们一个展现技能的方法。来解释下为什么能这么抽取:

    我们知道具有相同属性、相同功能的对象的集合叫做类!

    歌唱者都会唱歌啊,可以抽象一个歌唱家这个类,舞蹈家、码农也是一样。而他们又都是有技能的人。也可以抽取出来,来个技能类哈。

    代码:

     1 package com.dzf.designtest;
     2 
     3 /**
     4  * <desc>
     5  * 设计模式:简单工厂
     6  * 重要: 在工厂里面生成的对象要求具有相同的属性和功能 即:继承自同一个类,或者实现同一个接口
     7  * </desc>
     8  *
     9  * @author dingzf
    10  * @date 2018/3/30
    11  * @time 21:58
    12  */
    13 public class SimpleFactoryDemo {
    14     //此时main方法就是一个舞台
    15     public static void main(String[] args) {
    16         //在表演工厂里面实例化需要的对象
    17         //好比我们需要一个舞蹈者,当我们需要不同的功能的表演者的时候,可以通过改变参数来获取对应的对象
    18         Skiller skiller = SkillerFactory.getSkiller("dancer");
    19         skiller.show();
    20     }
    21 
    22 }
    23 
    24 abstract class Skiller {
    25     public abstract void show();
    26 }
    27 
    28 class Dancer extends Skiller {
    29     @Override
    30     public void show() {
    31         System.out.println("我来表演跳舞");
    32     }
    33 }
    34 
    35 class Singer extends Skiller {
    36     @Override
    37     public void show() {
    38         System.out.println("我来表演精彩的舞蹈");
    39     }
    40 }
    41 
    42 class Coder extends Skiller {
    43     @Override
    44     public void show() {
    45         System.out.println("我来表演专业写bug,让你们赞不绝口,哈哈哈~~");
    46     }
    47 }
    48 
    49 class SkillerFactory {
    50     public static Skiller getSkiller(String desc) {
    51         Skiller skiller = null;
    52         switch (desc) {
    53             case "dancer":
    54                 skiller = new Dancer();
    55                 break;
    56             case "singer":
    57                 skiller = new Singer();
    58                 break;
    59             case "coder":
    60                 skiller = new Coder();
    61                 break;
    62         }
    63         return  skiller;
    64     }
    65 
    66 }

    来总结下:

    简单工厂里的生成的类,要求他们实现同样的接口,或者继承自同一个类,即具有同样的功能,但是又在细节上有所不同、各自的实现不一样。

    当我们业务场景就像舞台表演一样的时候,基本的流程都是一样的,但是只有中间的某一个块具体的实现不一样,这时候你可以选择简单工厂。

    以上可以说是自己读大话涉及模式的一些读后感,如果有不对的地方,希望能够指正出来。

  • 相关阅读:
    HttpWebRequest代理访问网站
    一段获得天气信息的.net代码
    C# 加密解密(DES,3DES,MD5,Base64) 类
    Windows 8 电话激活密钥。(更新至 20130721)
    微软官方的一段JavaScript判断.net环境
    我的第一篇。以后在这个记录我的点点滴滴。。。
    Linux 2.6内核中新的锁机制RCU
    再见,viewDidUnload方法
    Mechanical Sympathy
    Why should a selfimplemented getter retain and autorelease the returned object
  • 原文地址:https://www.cnblogs.com/zfding/p/8679002.html
Copyright © 2011-2022 走看看