zoukankan      html  css  js  c++  java
  • 简单工厂模式(Simple Factory)

    从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。

    简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。

    该模式中包含的角色及其职责

    工厂(Creator)角色
    简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。

    抽象产品(Product)角色
    简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。

    具体产品(Concrete Product)角色
    是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。

      1 namespace 简单工厂
      2 {
      3     public enum HumanColor {White,Black,Yellow}
      4 
      5     public abstract class Human
      6     {
      7         public abstract void GetHumanColor();
      8         public abstract void Speak();
      9     }
     10 }
     11 
     12 namespace 简单工厂
     13 {
     14     public class WhiteHuman:Human
     15     {
     16         public override void GetHumanColor()
     17         {
     18             Console.WriteLine("人种颜色为:{0}",HumanColor.White);
     19         }
     20 
     21         public override void Speak()
     22         {
     23             Console.WriteLine("我是白人,我骄傲!");
     24         }
     25     }
     26 }
     27 
     28 namespace 简单工厂
     29 {
     30     public class BlackHuman:Human
     31     {
     32         public override void GetHumanColor()
     33         {
     34             Console.WriteLine("人种颜色为:{0}", HumanColor.Black);
     35         }
     36 
     37         public override void Speak()
     38         {
     39             Console.WriteLine("我是黑人,我骄傲!");
     40         }
     41     }
     42 }
     43 
     44 namespace 简单工厂
     45 {
     46     public class YellowHuman:Human
     47     {
     48         public override void GetHumanColor()
     49         {
     50             Console.WriteLine("人种颜色为:{0}", HumanColor.Yellow);
     51         }
     52 
     53         public override void Speak()
     54         {
     55             Console.WriteLine("我是黄种人,我骄傲!");
     56         }
     57     }
     58 }
     59 
     60 namespace 简单工厂
     61 {
     62     public class HumanFactory
     63     {
     64         public static Human CreateHuman(HumanColor color)
     65         {
     66             if (color == HumanColor.White)
     67             {
     68                 return new WhiteHuman();
     69             }
     70             else if (color == HumanColor.Black)
     71             {
     72                 return new BlackHuman();
     73             }
     74             else
     75             {
     76                 return new YellowHuman();
     77             }
     78         }
     79     }
     80 }
     81 
     82 namespace 简单工厂
     83 {
     84     class Program
     85     {
     86         static void Main(string[] args)
     87         {
     88             //创建白种人
     89             Human human1 = HumanFactory.CreateHuman(HumanColor.White);
     90             human1.GetHumanColor();
     91             human1.Speak();
     92 
     93             //创建黑人
     94             Human human2 = HumanFactory.CreateHuman(HumanColor.Black);
     95             human2.GetHumanColor();
     96             human2.Speak();
     97 
     98             //创建黄种人
     99             Human human3 = HumanFactory.CreateHuman(HumanColor.Yellow);
    100             human3.GetHumanColor();
    101             human3.Speak();
    102 
    103             Console.ReadKey();
    104         }
    105     }
    106 }
  • 相关阅读:
    ubuntu多版本java并切换环境
    ssh 免密登陆
    linux系统的文件和目录
    docker-compose简介及使用
    vue3.0 + html2canvas 一键截图
    vue3.0 无法获取对象值
    算法——回溯算法 (Back Tracking) (转)
    VMware——CentOS-64 7——桥接模式无法连接网络的问题
    groovy 字符串和闭包
    https://blog.didispace.com/
  • 原文地址:https://www.cnblogs.com/zhxlsuyu/p/3512075.html
Copyright © 2011-2022 走看看