zoukankan      html  css  js  c++  java
  • Pluge模式

    Pluge模式,是最常见的模式,实现后期绑定。增加程序灵活性,通过配制文件可以方便配制不同的实现。
    这篇POST以简单方式实现,代码中细节就不说了。

    接口:
    namespace SamplePlugePattern.Interface
    {
        
    /// <summary>
        
    /// define a action interface
        
    /// </summary>
        public interface IAction
        {
            
    void Burn();
        }
    }

    实现:
    namespace Machine
    {
        
    public class MachineT50:IAction
        {
            
    public void Burn()
            {
                Console.WriteLine(
    "MachineT50 is burning now.");
            }
        }
    }

    客户类:
    using System;
    using System.Collections.Generic;
    using System.Reflection;
    using System.Configuration;
    using SamplePlugePattern.Interface;

    namespace WorkPlat
    {
        
    /// <summary>
        
    /// Pluge Pattern Sample
        
    /// </summary>
        
    /// <remarks>author PetterLiu http://wintersun.cnblogs.com </remarks>
        class Program
        {
            
    static void Main(string[] args)
            {
                
    string AssemblyName = ConfigurationManager.AppSettings["AssemblyName"];
                
    string TypeName = ConfigurationManager.AppSettings["TypeName"];
                IAction action 
    = UsingActivator(AssemblyName, TypeName);
                action.Burn();
            }

            
    private static IAction UsingCurrentAppDomain(string assemblyname, string typename)
            {
                
    return AppDomain.CurrentDomain.CreateInstanceAndUnwrap(assemblyname, typename) as IAction;
            }

            
    private static IAction UsingActivator(string assemblyname, string typename)
            {
                Assembly assembly 
    = Assembly.Load(assemblyname);
                Type type 
    = assembly.GetType(typename);
                
    return Activator.CreateInstance(type) as IAction;
            }
        }
    }

    这里使用的是appSettings,实际中还可以用自定义配制节。
    <configuration>
      
    <appSettings>
        
    <add key="AssemblyName" value="Machine"/>
        
    <add key="TypeName" value="Machine.MachineT50"/>
      
    </appSettings>
    </configuration>

    Ps:我们还可以用Asp.net中的Provider模式,IOC来实现。
  • 相关阅读:
    windows RabbitMQ Server 环境配置中的一些坑
    Redis自定义fastJson Serializer
    如何使用Feign构造多参数的请求
    跨域访问支持(Spring Boot、Nginx、浏览器)
    chrome浏览器的跨域设置
    Jenkins手把手图文教程[基于Jenkins 2.164.1]
    Spring Boot 2发送邮件手把手图文教程
    poi读取Excel模板并修改模板内容与动态的增加行
    Lock类-ReentrantLock的使用
    类ThreadLocal的使用与源码分析
  • 原文地址:https://www.cnblogs.com/wintersun/p/1314596.html
Copyright © 2011-2022 走看看