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

IOC AOP 设计模式相关推荐

  1. Spring (Bean, IoC, AOP, SpringMVC)

    Spring - Bean, IoC, AOP, SpringMVC Spring 1. 核心容器 1.1 Spring-beans 1.1.1 Bean 的配置 1.1.1.1 自动装配 1.1.1 ...

  2. Spring原理/SpringMVC原理/IOC/AOP原理

    Spring原理/SpringMVC原理/IOC/AOP原理 我的微型IOC框架实现 我的微型IOC框架实现 当你打开这本书的时候我要告诉你的第一句话就是认真把前言读完,因为前言概括的本书的大纲以及思 ...

  3. Spring(IOC+AOP)

    Spring 容器(可以管理所有的组件(类))框架:        核心关注:IOC和AOP: Test:Spring的单元测试模块: spring-test-4.0.0.RELEASE Core C ...

  4. 面试必会系列 - 1.8 Spring IOC / AOP原理

    本文已收录至 Github(MD-Notes),若博客中图片模糊或打不开,可以来我的 Github 仓库,包含了完整图文:https://github.com/HanquanHq/MD-Notes,涵 ...

  5. 依赖注入[2]: 基于IoC的设计模式

    正如我们在<控制反转>提到过的,很多人将IoC理解为一种"面向对象的设计模式",实际上IoC自身不仅与面向对象没有必然的联系,它也算不上是一种设计模式.一般来讲,设计模 ...

  6. Spring IOC AOP详细笔记

    spring 文章目录 spring 什么是spring spring框架作用: ioc aop spring基本配置 IOC掌握什么? IOC创建对象方式 Spring配置 别名配置 bean配置 ...

  7. IoC+AOP的简单实现

    原文地址为: IoC+AOP的简单实现 对EnterLib有所了解的人应该知道,其中有一个名叫Policy Injection的AOP框架:而整个EnterLib完全建立在另一个叫作Unity的底层框 ...

  8. spring aop设计模式_Spring框架中设计模式的运用

    设计模式大家可能随口就能说出总共有23种,但是具体怎么用,或者在常用的组建中有哪些体现,这时候不一定说的上来了.接下来几篇文章,我们一起深入理解.首先我们一起了解下常用的组建中是怎么运用的,比如 JD ...

  9. IOC AOP OOP拙见

    IOC 控制反转 IOC主要两种设计模式:1.BeanFactory为代表的容器 2.ApplicationContext为代表的应用上下文容器 IOC两种设计模式区别:1. BeanFactory提 ...

最新文章

  1. android 之Fragment的详解
  2. 苹果发布第四财季财报 iPhone 13上市初期表现如何将见分晓
  3. 浏览器并发连接数(转载)
  4. 想要定位其中的iframe并切进去的定位方法
  5. TSAP(2) : 时区切换
  6. WPF|分享一个登录界面设计
  7. ansys计算机热仿真,ANSYS仿真软件热分析
  8. 空间解析几何之向量运算
  9. TShockwaveFlash的安装及其属性和方法
  10. java黄金分割点游戏_黄金点游戏(单机版)
  11. 那些年踩过的坑-之《Android Q-高通平台UAC(USB Audio Class)调试记录》
  12. Python 自动化提取基因的 CDS
  13. 计算机网络:路由的概念及其分类
  14. php小数点后保留一位或两位小数
  15. Linux 查看CPU信息,机器型号,内存等信息
  16. 库卡工业机器人负载曲线图_德国库卡机器人选型帮助(负载篇)
  17. 请解释下为什么鹿晗发布恋情的时候,微博系统会崩溃,如何解决?
  18. 计算机科学与技术专业相关英语论文,计算机科学与技术专业 毕业论文 外文翻译中英文对照.doc...
  19. win10共享能打开打不开服务器文件,win10系统下共享文件夹无法打开如何解决
  20. Welcome to the skynet wiki!

热门文章

  1. Android:Kotlin语法基础
  2. 购买腾讯云主机后的快速配置
  3. spark-submit提交参数说明以及与yarn-site.xml中参数的相互约束关系+spark运行架构图解(持续更新中)
  4. pandas的dataframe节省内存
  5. pandas中的DataFrame转化为dict
  6. 计算机系统基础:数字的机器表示
  7. Hadoop, Hbase
  8. maven项目,httpclient jar包冲突
  9. python-websocket-server hacking
  10. JDBC连接不同数据库的连接参数