zoukankan      html  css  js  c++  java
  • 设计模式之笔记--抽象工厂模式(Abstract Factory)

    抽象工厂模式(Abstract Factory)

    定义

           抽象工厂模式(Abstract Factory),提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

    类图

    描述

    多个抽象产品类,每个抽象产品类可以派生出多个具体产品类;
    一个抽象工厂类,可以派生出多个具体工厂类;
    每个具体工厂可以创建多个具体产品,即每个工厂可以生产一个产品集合

    应用场景

          轿车是由发动机、车轮、车体结构、方向盘等部件组成的,现在要生产一辆轿车,就需要把各个部件抽象出来单独封装,再由汽车工厂来组装轿车。

        /// <summary>
        /// 发动机接口
        /// </summary>
        public interface IEngine
        {
            void Install();
        }
    
        /// <summary>
        /// 奥迪发动机
        /// </summary>
        public class AudiEngine : IEngine
        {
            public void Install()
            {
                Console.WriteLine("安装奥迪的发动机.");
            }
        }
    
        /// <summary>
        /// 奔驰发动机
        /// </summary>
        public class BenzEngine : IEngine
        {
            public void Install()
            {
                Console.WriteLine("安装奔驰的发动机.");
            }
        }
    
        /// <summary>
        /// 车轮接口
        /// </summary>
        public interface IWheel
        {
            void InstallLeftFrontWheel();
            void InstallRightFrontWheel();
            void InstallLeftBackWheel();
            void InstallRightBackWheel();
        }
    
        /// <summary>
        /// 奥迪车轮
        /// </summary>
        public class AudiWheel : IWheel
        {
            public void InstallLeftFrontWheel()
            {
                Console.WriteLine("安装奥迪的左前车轮.");
            }
    
            public void InstallRightFrontWheel()
            {
                Console.WriteLine("安装奥迪的右前车轮.");
            }
    
            public void InstallLeftBackWheel()
            {
                Console.WriteLine("安装奥迪的左后车轮.");
            }
    
            public void InstallRightBackWheel()
            {
                Console.WriteLine("安装奥迪的右后车轮.");
            }
        }
    
        /// <summary>
        /// 奔驰车轮
        /// </summary>
        public class BenzWheel : IWheel
        {
            public void InstallLeftFrontWheel()
            {
                Console.WriteLine("安装奔驰的左前车轮.");
            }
    
            public void InstallRightFrontWheel()
            {
                Console.WriteLine("安装奔驰的右前车轮.");
            }
    
            public void InstallLeftBackWheel()
            {
                Console.WriteLine("安装奔驰的左后车轮.");
            }
    
            public void InstallRightBackWheel()
            {
                Console.WriteLine("安装奔驰的右后车轮.");
            }
        }
    
        /// <summary>
        /// 车体结构接口
        /// </summary>
        public interface IBody
        {
            void Install();
        }
    
        /// <summary>
        /// 奥迪的车体结构
        /// </summary>
        public class AudiBody : IBody
        {
            public void Install()
            {
                Console.WriteLine("安装奥迪的车身结构.");
            }
        }
    
        /// <summary>
        /// 奔驰的车体结构
        /// </summary>
        public class BenzBody : IBody
        {
            public void Install()
            {
                Console.WriteLine("安装奔驰的车身结构.");
            }
        }
    
        /// <summary>
        /// 汽车工厂接口
        /// </summary>
        public interface ICarFactory
        {
            IBody CreateBody();
            IEngine CreateEngine();
            IWheel CreateWheel();
        }
    
        /// <summary>
        /// 具体的奥迪工厂类
        /// </summary>
        public class AudiFactory : ICarFactory
        {
            public IEngine CreateEngine()
            {
                return new AudiEngine();
            }
    
            public IWheel CreateWheel()
            {
                return new AudiWheel();
            }
    
            public IBody CreateBody()
            {
                return new AudiBody();
            }
        }
    
        /// <summary>
        /// 具体的奔驰工厂类
        /// </summary>
        public class BenzFactory : ICarFactory
        {
            public IEngine CreateEngine()
            {
                return new BenzEngine();
            }
    
            public IWheel CreateWheel()
            {
                return new BenzWheel();
            }
    
            public IBody CreateBody()
            {
                return new BenzBody();
            }
        }
  • 相关阅读:
    代理工具介绍
    Cookie 相关
    在JavaScript 使用命名空间
    oracle rank()用法
    sql update 特殊用法
    Repeat 嵌套绑定
    .net 中隐式事务和显示事务的用法
    为站点添加迅雷下载和快车下载
    缺少MSVCR71.DLL解决方式
    关于AppFabric Caching的学习摘录
  • 原文地址:https://www.cnblogs.com/zhou-yi/p/5314710.html
Copyright © 2011-2022 走看看