zoukankan      html  css  js  c++  java
  • 抽象工厂模式

    概述

      抽象工厂提供一个创建产品的接口来负责创建相关或依赖的对象,而不具体明确指定具体类。也可以这样理解,它负责创建某一特定系列产品,但是它只提供接口方法。

    抽象工厂的意义

      假如我们去理发店,给师傅说剪个平头,师傅可能使用推子;剪个杀马特,师傅可能会使用剪刀。我们说出理发的需求,理发师傅就会用不同的处理方法满足我们的需求,我们把需求抽象,这样我们就可以增加具体类来丰富我们的需求;同样,我们把方法抽象,我们也可以来丰富我们的处理方法。这样,我们就不需要修改我们的源代码,直接增加需求和方法的具体类,增加了代码的可扩展性。(开放-闭合原则:对扩展开放,对修改关闭)

    实现抽象工厂类

      这里涉及到2个抽象类,即需求和方法:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 
     6 namespace AbstractFactory
     7 {
     8     //需求 抽象类
     9     public abstract class Factory
    10     {
    11         public abstract Method HairStyle();
    12     }
    13 
    14     //方法 抽象类
    15     public abstract class Method
    16     {
    17         public abstract void UseMethod();
    18     }
    19 
    20 /// <summary>
    21 /// 平头
    22 /// </summary>
    23     public class pingtouFactory : Factory
    24     {
    25         public override Method HairStyle()
    26         {
    27             Console.WriteLine(" 需求: 平头");
    28             return new pingtouMethod();
    29         }
    30     }
    31     public class pingtouMethod : Method
    32     {
    33         public override void UseMethod()
    34         {
    35              Console.WriteLine(" 方法: 平头
    ");
    36         }
    37     }
    38 //
    39 
    40 /// <summary>
    41 /// 杀马特
    42 /// </summary>
    43      public class shamateFactory : Factory
    44     {
    45          public override Method HairStyle()
    46         {
    47             Console.WriteLine(" 需求: 杀马特");
    48             return new shamateMethod();
    49         }
    50     }
    51     public class shamateMethod : Method
    52     {
    53         public override void UseMethod()
    54         {
    55             Console.WriteLine(" 方法: 杀马特
    ");
    56         }
    57     }
    58 
    59     class Program
    60     {
    61         static void Main(string[] args)
    62         {
    63             Factory p = new pingtouFactory();
    64             p.HairStyle().UseMethod();
    65 
    66             Factory s = new shamateFactory();
    67             s.HairStyle().UseMethod();
    68         }
    69     }
    70 }

    如果我们还需要其他发型,我们只需要增加需求发型的具体类和方法类即可。不需要修改原来的代码。

     但是这里的需求和方法是一一对应的,我们并不能增加一个需求的另外一种或者多种方法。因为接口只有一个,增加多种方法,就需要修改抽象接口类。

  • 相关阅读:
    前后端分离
    git的基本使用
    PHP中的接口
    Java里面的接口
    面向对象的接口
    python调用Shell脚本:os.system(cmd)或os.popen(cmd)()【转】
    得到系统删除程序里的FIREFOX
    NSMutableArray,NSArray (From DFdou's Blog)
    iPhone delegate 两界面传递数据(转)
    字符串乘积运算+连接
  • 原文地址:https://www.cnblogs.com/jqm304775992/p/4969160.html
Copyright © 2011-2022 走看看