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

    简单工厂:抽象产品,工厂没有抽象出来。

    工厂方法:抽象产品,抽象工厂。

    抽象工厂:抽象多种产品,抽象工厂。

    代码1:工厂抽象部分

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Reflection;
    using System.Configuration;
    
    namespace AbstractFactory
    {
        /// <summary>
        /// 抽象工厂
        /// </summary>
        public abstract class AbstractClothesFactory
        {
            //抽象方法:创建一个上衣
            abstract public AbstractCoat CreateCoat();
            //抽象方法:创建一个裤子
            abstract public AbstractTrousers CreateTrousers();
        }
    
        /// <summary>
        ///时尚男装 
        /// </summary>
        public class FashionManClothesFactory : AbstractClothesFactory
        {
            public override AbstractCoat CreateCoat()
            {
                return new CoatMan();
            }
    
            public override AbstractTrousers CreateTrousers()
            {
                return new TrousersMan();
            }
        }
    
        /// <summary>
        /// 时尚女装
        /// </summary>
        public class FashionWomanClothesFactory : AbstractClothesFactory
        {
            public override AbstractCoat CreateCoat()
            {
                return new CoatWomen();
                //throw new Exception("The method or operation is not implemented.");
            }
            public override AbstractTrousers CreateTrousers()
            {
                return new TrouserWomen();
                //throw new Exception("The method or operation is not implemented.");
            }
        }
    }
    

    代码2:抽象产品部分

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Reflection;
    using System.Configuration;
    
    namespace AbstractFactory
    {
    
        /// <summary>
        /// 抽象产品----上衣抽象类
        /// </summary>
        public abstract class AbstractCoat
        {
            //性别属性
            public abstract bool Sex
            {
                get;
            }
    
            //样式属性
            public abstract string Style
            {
                get;
            }
        }
    
        /// <summary>
        /// 时尚男性上衣
        /// </summary>
        public class CoatMan : AbstractCoat
        {
            private bool sex = true;
            private string style = "时尚";
            /// <summary>
            /// 重写基类的Sex属性
            /// </summary>
            public override bool Sex
            {
                get
                {
                    return sex;
                }
            }
    
            /// <summary>
            /// 重写基类的Style属性
            /// </summary>
            public override string Style
            {
                get
                {
                    return style;
                }
            }
        }
    
        /// <summary>
        /// 时尚男性上衣
        /// </summary>
        public class CoatWomen : AbstractCoat
        {
            private bool sex = false;
            private string style = "时尚";
            /// <summary>
            /// 重写基类的Sex属性
            /// </summary>
            public override bool Sex
            {
                get
                {
                    return sex;
                }
            }
    
            /// <summary>
            /// 重写基类的Style属性
            /// </summary>
            public override string Style
            {
                get
                {
                    return style;
                }
            }
        }
    
        /// <summary>
        /// 抽象产品----裤子抽象类
        /// </summary>
        public abstract class AbstractTrousers
        {
            //性别属性
            public abstract bool Sex
            {
                get;
            }
    
            //样式属性
            public abstract string Style
            {
                get;
            }
        }
    
        /// <summary>
        /// 时尚男性裤子
        /// </summary>
        public class TrousersMan : AbstractTrousers
        {
            private bool sex = true;
            private string style = "时尚";
            public override bool Sex
            {
                get
                {
                    return sex;
                }
            }
            public override string Style
            {
                get
                {
                    return style;
                }
            }
        }
    
        /// <summary>
        /// 时尚男性裤子
        /// </summary>
        public class TrouserWomen : AbstractTrousers
        {
            private bool sex = false;
            private string style = "时尚";
            public override bool Sex
            {
                get
                {
                    return sex;
                }
            }
            public override string Style
            {
                get
                {
                    return style;
                }
            }
        }
    }
    

    代码3:对工厂进行包装

     /// <summary>
        /// 创建衣服类
        /// </summary>
        public class CreateClothes
        {
            private AbstractCoat myCoat;
            private AbstractTrousers myTrousers;
            public CreateClothes(AbstractClothesFactory clothes)
            {
                myCoat = clothes.CreateCoat();
                myTrousers = clothes.CreateTrousers();
            }
    
            public void ShowMyClothes()
            {
                Console.WriteLine("My Clothes:");
                string sex = myCoat.Sex ? "男" : "女";
                //Console.WriteLine("Coat:{0} {1}", myCoat.Sex ? "男" : "女", myCoat.Style);
                Console.WriteLine("Coat:{0} {1}", sex, myCoat.Style);
                sex = myTrousers.Sex ? "男" : "女";
                Console.WriteLine("Trousers:{0} {1}", sex, myTrousers.Style);
            }
        }
    

    代码4:客户端代码

       public class Client
        {
            static void Main1(string[] args)
            {
                //创建一个工厂类的实例   
                string assemblyName = ConfigurationManager.AppSettings["assemblyName"];
                string fullTypeName = string.Concat(ConfigurationManager.AppSettings["nameSpaceName"], ".", ConfigurationManager.AppSettings["typename"]);
    
                AbstractClothesFactory factory = (AbstractClothesFactory)Assembly.Load(assemblyName).CreateInstance(fullTypeName);
                CreateClothes clothes = new CreateClothes(factory);
                clothes.ShowMyClothes();
                Console.Read();
            }
        }
    

      

  • 相关阅读:
    JS BOM对象 History对象 Location对象
    JS 字符串对象 数组对象 函数对象 函数作用域
    JS 引入方式 基本数据类型 运算符 控制语句 循环 异常
    Pycharm Html CSS JS 快捷方式创建元素
    CSS 内外边距 float positio属性
    CSS 颜色 字体 背景 文本 边框 列表 display属性
    【Android】RxJava的使用(三)转换——map、flatMap
    【Android】RxJava的使用(二)Action
    【Android】RxJava的使用(一)基本用法
    【Android】Retrofit 2.0 的使用
  • 原文地址:https://www.cnblogs.com/wuMing-dj/p/3357219.html
Copyright © 2011-2022 走看看