zoukankan      html  css  js  c++  java
  • 设计模式工厂模式 AbstractFactory(抽象工厂)

    工厂模式是对现实生活中工厂的一种高度抽象,它是由一系列的接口(抽象类)架构起来的,是和具体实体类相分离的。

    AbstractFactory是工厂的基类,所有工厂都继承自他,他可以生产各种产品。

    AbstractProduct是产品的基类,所有实体类都继承自他。

    Client是与用户交互的。

    示例代码:

    根据创建工厂模式的先后顺序创建一下类:

    1.AbstractCar(AbstractProductA) and AbstractBicyle(AbstractProductB)

    View Code
    1 public abstract class AbstractBicycle
    2     {
    3         public abstract void ShowSelfType(AbstractBicycle bicycle);
    4     }
    View Code
    1  public abstract class AbstractCar
    2     {
    3         public abstract void ShowSelfType(AbstractCar car);
    4     }

    2.创建抽象工厂,包含抽象的创建实例的方法(生产产品的方法)

    View Code
    1 public abstract class AbstractFactory
    2     {
    3         public abstract AbstractCar CreateAbstractCar();
    4         public abstract AbstractBicycle CreateAbstractBicycle();
    5     }

    3.创建分工厂

    View Code
     1     public class NewAbstractFactory : AbstractFactory
     2     {
     3         public override AbstractCar CreateAbstractCar()
     4         {
     5             return new NewCar();
     6         }
     7 
     8         public override AbstractBicycle CreateAbstractBicycle()
     9         {
    10             return new NewBicycle();
    11         }
    12     }
    View Code
     1     public class OldAbstractFactory : AbstractFactory
     2     {
     3         public override AbstractCar CreateAbstractCar()
     4         {
     5             return new OldCar();
     6         }
     7 
     8         public override AbstractBicycle CreateAbstractBicycle()
     9         {
    10             return new OldBicycle();
    11         }
    12     }

    4.创建实际的产品(最终的实体类)

    View Code
    1  public class OldCar : AbstractCar
    2     {
    3         public override void ShowSelfType(AbstractCar car)
    4         {
    5             Console.WriteLine(car.GetType().Name);
    6         }
    7     }
    View Code
    1     public class NewCar : AbstractCar
    2     {
    3         public override void ShowSelfType(AbstractCar car)
    4         {
    5             Console.WriteLine(car.GetType().Name);
    6         }
    7     }
    View Code
    1     public class NewBicycle : AbstractBicycle
    2     {
    3         public override void ShowSelfType(AbstractBicycle bicycle)
    4         {
    5             Console.WriteLine(bicycle.GetType().Name);
    6         }
    7     }
    View Code
    1     public class OldBicycle : AbstractBicycle
    2     {
    3         public override void ShowSelfType(AbstractBicycle bicycle)
    4         {
    5             Console.WriteLine(bicycle.GetType().Name);
    6         }
    7     }

    5.创建Client(给用户的客户端)

    View Code
     1     public class Client
     2     {
     3         private AbstractBicycle AbstractBicycle;
     4         private AbstractCar AbstractCar;
     5 
     6         public Client(AbstractFactory factory)
     7         {
     8             AbstractBicycle = factory.CreateAbstractBicycle();
     9             AbstractCar = factory.CreateAbstractCar();
    10         }
    11 
    12         public void Run()
    13         {
    14             AbstractBicycle.ShowSelfType(AbstractBicycle);
    15             AbstractCar.ShowSelfType(AbstractCar);
    16         }
    17     }

    6.运行

    View Code
     1     class Program
     2     {
     3         static void Main(string[] args)
     4         {
     5             AbstractFactory oldFactory = new OldAbstractFactory();
     6             AbstractFactory newFactory = new NewAbstractFactory();
     7 
     8             Client c1 = new Client(oldFactory);
     9             Client c2 = new Client(newFactory);
    10 
    11             c1.Run();
    12             c2.Run();
    13 
    14             Console.Read();
    15 
    16         }
    17     }

    7.运行结果

    感觉是不是很神奇啊,这主要利用的是面向对象编程语言的继承特性。慢慢体会吧!

  • 相关阅读:
    PHPExcel读取excel03/07版到数组
    firefox 自定义快捷键
    phpstorm 自定义函数配置
    解决FPDF报错:FPDF error: Not a JPEG file / FPDF error: Not a PNG file
    mysql学习笔记
    定时备份服务器数据库(借助windows任务计划以及mysqldump)
    discuz 注册用户用到的几个表
    phpstorm配置取消掉63342
    discuz random函数
    discuz X3.2邮箱非必填
  • 原文地址:https://www.cnblogs.com/LiuShuaiXiaoBuDian/p/2762319.html
Copyright © 2011-2022 走看看