简单工厂、抽象工厂、反射工厂

 static void Main(string[] args)
        {

            Simple simpleOne = new SimpleOne();
            simpleOne.ShowName();

            Simple simpleTwo = new SimpleTwo();
            simpleTwo.ShowName();

            // 创建对象
            Simple simple1 = Factory.CreateIntance(SimpleType.SimpleOne);
            Simple simple2 = Factory.CreateIntance(SimpleType.SimpleTwo);

            // 反射工厂
            Simple reflectionRe = ReflectionReFactory.CreateIntance();
using System;
using System.Collections.Generic;
using System.Text;

namespace _Net初级
{

    public enum SimpleType
    {
        SimpleOne = 0,

        SimpleTwo = 2,
    }

    /// <summary>
    /// 简单工厂
    /// </summary>
    public class Factory
    {

        public static Simple CreateIntance(SimpleType simpleType)
        {
            //   这个 地方可放在配置文件,根据配置去生成所想要的对象
            string config = "可以从配置文件读取";
            var type = Enum.TryParse(config, out SimpleType simple);

            switch (simpleType)
            {
                case SimpleType.SimpleOne:
                    return new SimpleOne();
                case SimpleType.SimpleTwo:
                    return new SimpleTwo();
                default:
                    throw new Exception(" Error");
            }

        }

    }
    /// <summary>
    /// 反射工厂
    /// </summary>
    public class ReflectionReFactory
    {
        public static Simple CreateIntance()
        {
            //ObjectHandle是远程MarshalByRefObject的, 由远程处理生存期服务跟踪。 如果的ObjectHandle生存期租约过期, 则对当前方法的调用可能会失败。
            return (Simple)Activator.CreateInstance($"程序集名称", "类型名称").Unwrap();
        }

    }
    public abstract class Simple
    {
        public abstract void ShowName();
        /// <summary>
        /// 抽象类可以有自己的方法,接口不能有实现
        /// </summary>
        public void GetName()
        {

        }
    }

    public class SimpleOne : Simple
    {
        public override void ShowName()
        {
            Console.WriteLine($"{nameof(SimpleOne)}_{nameof(ShowName)}");
        }
    }
    public class SimpleTwo : Simple
    {
        public override void ShowName()
        {
            Console.WriteLine($"{nameof(SimpleTwo)}_{nameof(ShowName)}");
        }
    }
}

原文地址:https://www.cnblogs.com/hnzheng/p/12687105.html

时间: 2024-10-11 00:58:29

简单工厂、抽象工厂、反射工厂的相关文章

抽象工厂模式(JAVA反射)

实例代码(JAVA):模式动机 在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂中只有一个工厂方法或者一组重载的工厂方法.但是有时候我们需要一个工厂可以提供多个产品对象,而不是单一的产品对象. 为了更清晰地理解工厂方法模式,需要先引入两个概念: ? 产品等级结构:产品等级结构即产品的继承结构,如一个抽象类是电视机,其子类有海尔电视机.海信电视机.TCL电视机,则抽象电视机与具体品牌的电视机之间构成了一个产品等级结构,抽象电

复习笔记:一个简单的反射工厂Demo

项目根目录创建一个properties文件: Apple = cn.gry.vo.Apple Orange = cn.gry.vo.Orange 创建接口: interface Fruit{ public void eat() ; } 创建两个vo类: class Apple implements Fruit{ public void eat(){ System.out.println("吃苹果") ; } } class Orange implements Fruit{ public

重构版机房收费系统之分层、接口、数据库连接、反射+工厂(vb.net)

分层 分层是为了减少层与层之间的依赖,添加程序的可读性,让整个系统结构清晰明白.还可大大减少维护成本,可是分层也有一定的缺点,有些能够直接訪问数据库的层,却要通过负责訪问数据库的层进行訪问.这样,在訪问数据库过程中就多出一个环节,添加了系统的开销,有时候要在表示层添加某个功能.为了减少耦合,就不得不自上而下,在每一层里面添加这个功能所需的服务类,这样就添加了开发成本 分层越多越好吗?答案是否定的,引用一句话"我们也要     时刻谨记:不能盲目分层,不应分层而分层不应模式而模式. 这是非常重要的

java工厂类与反射机制

java 简单工厂类 2012-04-22 15:44:07|  分类: java |  标签:java工厂类  简单工厂类  |举报|字号 订阅 简单工厂模式需要由以下角色组成: 接口                        接口的实现类(简单工厂模式里面的具体产品角色)                        工厂注意对比以下三个实例的不同实例1: package org.jzkangta.factorydemo01;//定义接口interface Car{    public 

ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(十一) 代码重构使用反射工厂解耦

前言 自从此博客发表以及代码开源以来,得到了许多人的关注.也没许多吧,反正在我意料之外的.包括几位大牛帮我做订阅号推广,真的很感谢他们.另外,还有几个高手给我提了一些架构上的问题.其实本身这个项目是没有做什么架构设计的.只是简单分了分层.不过我在经过仔细思考之后决定对项目架构做些调整,当然在我的技术范围之内,我相信还会有第二次,第三次甚至更多重构,我希望把他变得更加完美. 重构思路 对于重构思路,我首先想到的是,让程序能够支持多种数据库,比如我现在用的是SQLServer,而好多朋友用MySQL

反射工厂类

在.net 中,使用反射工厂类,可以方位动态链接库中 对象的元数据,动态创建对象, 具体理论以及实现这里不再详述. 现在引用一段代码,简单表示一下: /// <summary>        /// 使用没有添加引用的dll        /// </summary>        /// <typeparam name="T">要创建对象的类型</typeparam>        /// <param name="as

C#使用反射工厂模式遇到System.TypeLoadException

项目中,在运行另一个反射类时出现问题,未能从程序集中加载类 class PopUpActionFactory { public static InterfacePopUpAction getAction(String actionName) { InterfacePopUpAction action = null; actionName = "XSheet.Data.PopUpAction.PopUpAction" + actionName; //XNamedTable try { T

说谎的简单工厂模式设计模式&amp;amp;工厂方法模式&amp;amp;Abstract Factory模式

工厂模式被分成三个:简单工厂模式,抽象工厂模式和工厂模式. 定义: 简单工厂模式:用一个单独的类来做创造实例的过程. 工厂模式:一个用于创建对象的接口.让子类决定实例化哪一个类,讲一个类的实例化 延迟到其子类. 抽象工厂模式:为创建一组相关或相互依赖的对象的类,而不指定详细类. 结构图: 这是简单工厂的结构图,从图中就非常好理解. 简单工厂的长处: 依据用户须要,new出须要的对象. 可是简单工厂弊端: 当新增加一个功能是.就要改动工厂. 这个时候,就须要工厂模式了. watermark/2/t

创建和使用解耦——工厂模式详解(工厂方法+抽象工厂)

1.前言 直接new一个对象是最简单的创建对象的方式,但大量出现在业务代码中会带来至少两个问题.1:创建对象的细节直接暴露在业务代码中,修改实现细节必须修改相关的大量客户端代码.2:直接面向具体类型编程,违反了面向接口编程的原则,系统进行扩展时也不得不进行大量修改.要使得系统具有的良好的可扩展性以及后期易于维护,必须实现对产品的获取和对产品的使用解耦.要做到这两点,首先要对客户端代码屏蔽掉创建产品的细节,其次,客户端必须面向产品的抽象编程,利用java的多态特性在运行时才确定具体的产品.而这,正