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

    可以用抽象工厂模式来造车。

    车的品牌有很多,而且车的属性也不少,比如车的类型、排量、门的数量,等等。可以提炼出有关车的一个抽象类:

        public abstract class Car
    
        {
    
            public string Model { get; set; }
    
            public string Engine { get; set; }
    
            public string Transmission { get; set; }
    
            public string Body { get; set; }
    
            public int Doors { get; set; }
    
            public List<string> Accessores = new List<string>();
    
            public abstract void ShowCarInfo();
    
        }

    既然是抽象工厂,提炼出一个造车的接口:

        public interface ICarFactory
    
        {
    
            Car ProduceCar();
    
        }    

    写一个Car的派生类:

        public class MyCar : Car
    
        {
    
            public MyCar()
    
            {
    
                Model = "型号001";
    
                Engine = "发动机V";
    
                Transmission = "排量1";
    
                Body = "SUV";
    
                Doors = 4;
    
                Accessores.Add("内饰");
    
                Accessores.Add("外饰");
    
            }
    
            public override void ShowCarInfo()
    
            {
    
                Console.WriteLine(Model);
    
                Console.WriteLine(Engine);
    
                Console.WriteLine(Body);
    
                Console.WriteLine("门数量:" + Doors);
    
                Console.WriteLine("包括:");
    
                foreach (var accessory in Accessores)
    
                {
    
                    Console.WriteLine("	{0}", accessory);
    
                }
    
            }
    
        }  
    

    MyCar需要一个对应的具体工厂来造车。写一个具体工厂类,实现ICarFactory接口。

        public class MyFactory : ICarFactory
    
        {
    
            public Car ProduceCar()
    
            {
    
                return new MyCar();
    
            }
    
        }     

    在客户端,如果要造车,就找具体工厂就可以了。

            static void Main(string[] args)
    
            {
    
                ICarFactory carFactory = new MyFactory();
    
                carFactory.ProduceCar().ShowCarInfo();
    
                Console.ReadKey();
    
            }

    总结:

    1、需要工厂生产对象的抽象类以及派生类
    2、需要一个抽象工厂接口
    3、通过抽象工厂造车,必须把所有的细节都设计在代表车的抽象类中,扩展性不好

  • 相关阅读:
    Centos下一个server安装的版本号mysql
    android 玩愤怒的小鸟等游戏的时候全屏TP失败
    6.8 一般处理语言
    [AC自己主动机+可能性dp] hdu 3689 Infinite monkey theorem
    POJ1185:火炮(减少国家)
    教你如何下载音乐的网站只试镜
    实现js呼叫流行
    [Angular 2] Async Http
    [Typescript] Function defination
    [React] React Router: setRouteWillLeaveHook
  • 原文地址:https://www.cnblogs.com/darrenji/p/4619346.html
Copyright © 2011-2022 走看看