IOC AOP 设计模式

IOC AOP 不是什么技术而是一种设计模式  学习 IOC AOP 其实是在学习一种思想。

1.IOC 

  IOC其实是 将对象的创建和获取提取到外部。由外部IOC容器提供需要的组件。

     看下面代码:

    public class Girl
    { //外部包办直接传入boy类
        public void kiss3(Boy boy)
        {
            Console.WriteLine("girl kiss boy"); 
            boy.kiss();
        }
   
    } public class Boy
    {
        public void kiss()
        {
            Console.WriteLine("boy kiss girl");
        }
    }

当我在Girl类中要使用Boy类的时候一般做法是在 Girl中实例化Boy类在进行调用如下代码:

    public class Girl
    {
        //1. 内部实例化boy类
        public void kiss1()
        { 
            Boy boy = new Boy();
            boy.kiss();
        }
    }

然而在IOC 设计模式中 则将实例化操作放到了 IOC容器中,在这里我们将 main 函数作为它的容器。

        static void Main(string[] args)
        {
            Boy boy = new Boy();
            Girl girl = new Girl();
            girl.kiss3(boy); 
        }

2.AOP

  AOP其实是一种-Proxy模式 (代理模式) 关注主要的东西,也可以说让你只关注业务,其他的东西就让AOP帮你完成。

  看下代码 我定义了一个计算的接口

    /// <summary>
    /// 抽象主题角色(Subject)
    /// </summary>
    public interface IMath
    {
        // 方法
        double Add(double x, double y);
        double Sub(double x, double y);
        double Mul(double x, double y);
        double Div(double x, double y);

    }
    /// <summary>
    /// 真实主题角色(RealSubject)角色
    /// </summary>
    public class Math : MarshalByRefObject, IMath
    {
        // 方法
        public double Add(double x, double y) { return x + y; }
        public double Sub(double x, double y) { return x - y; }
        public double Mul(double x, double y) { return x * y; }
        public double Div(double x, double y) { return x / y; }

    }

我通过代理来实现,但是这时候我 Math 类只会做 加法Add 方法,那把其余的交给其人做。 

    /// <summary>
    ///  远程代理对象 Remote "Proxy Object" 
    ///  代理主题(Proxy)角色
    /// </summary>
    public class MathProxy
    {
        IMath math;

        // 构造函数
        public MathProxy()
        { 
            if (math == null)
                math = new Math(); 
        }

        // 方法
        public double Add(double x, double y)
        {
            return math.Add(x, y);
        }
        public double Sub(double x, double y)
        {
            return 0;
        }
        public double Mul(double x, double y)
        {
            return 0;
        }
        public double Div(double x, double y)
        {
            return 0;
        }
 
    }
        static void Main(string[] args)
        {
            // 创建代理和请求一个服务
            Proxy p = new Proxy();
            p.Request();

            //创建函数
            MathProxy mp = new MathProxy();

            // 执行函数
            Console.WriteLine("4 + 2 = {0}", mp.Add(4, 2));
            Console.WriteLine("4 - 2 = {0}", mp.Sub(4, 2));
            Console.WriteLine("4 * 2 = {0}", mp.Mul(4, 2));
            Console.WriteLine("4 / 2 = {0}", mp.Div(4, 2)); 
            Console.ReadLine();
        }

这个过程就叫AOP。 我只关注一个加法运算 其余的交给其他人做。

3.IOC AOP 联合使用

只要改下代理就好。 通过外部的IOC容器来注入依赖对象

    /// <summary>
    ///  远程代理对象 Remote "Proxy Object" 
    ///  代理主题(Proxy)角色
    /// </summary>
    public class MathProxy
    {
        IMath math;

        // 构造函数
        public MathProxy(IMath _math)
        {  
                math = _math;
        }

        // 方法
        public double Add(double x, double y)
        {
            return math.Add(x, y);
        }
        public double Sub(double x, double y)
        {
            return math.Sub(x, y);
        }
        public double Mul(double x, double y)
        {
            return math.Mul(x, y);
        }
        public double Div(double x, double y)
        {
            return math.Div(x, y);
        }
 
    }
原文地址:https://www.cnblogs.com/dragon-L/p/4463471.html