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);
        }

    }
时间: 2024-10-12 23:36:50

IOC AOP 设计模式的相关文章

spring的优点 ioc aop

spring 的优点? 1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦 2.可以使用容易提供的众多服务,如事务管理,消息服务等 3.容器提供单例模式支持 4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能 5.容器提供了众多的辅助类,能加快应用的开发 6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等 7.spring属于低侵入式设计,代码的污染极低 8.独立于各种应用服务器 9.spring的DI机制降低了业务对象替换的复

spring ioc aop 原理

spring ioc aop 原理 spring ioc aop 的原理 spring的IoC容器是spring的核心,spring AOP是spring框架的重要组成部分. 在传统的程序设计中,当调用者需要被调用者的协助时,通常由调用者来创建被调用者的实例.但在spring里创建被调用者的工作不再由调用者来完成,因此控制反转(IoC):创建被调用者实例的工作通常由spring容器来完成,然后注入调用者,因此也被称为依赖注入(DI),依赖注入和控制反转是同一个概念. 面向方面编程(AOP)是以另

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

正如我们在<控制反转>提到过的,很多人将IoC理解为一种"面向对象的设计模式",实际上IoC自身不仅与面向对象没有必然的联系,它也算不上是一种设计模式.一般来讲,设计模式提供了一种解决某种具体问题的方案,但是IoC既没有一个针对性的问题领域,其自身没有提供一种可实施的解决方案,所以我更加倾向于将IoC视为一种设计原则.实际上很多我们熟悉的设计模式背后采用了IoC原则,接下来我们就来介绍几种典型的"设计模式". 一.模板方法 提到IoC,很多人首先想到的是

spring ioc aop 的原理

IOC(反转控制):对成员变量的赋值的控制权从代码中反转到配置文件中.AOP:Aspect(切面) Oriented(面向) Programming(编程),面向切面编程.差不多就够了,再看就是Spring的事务处理,基本就这些.

Spring初探(IOC,AOP,DI)

Spring的引出: 问题1:依赖配置信息... class UserDaoImpl implements UserDao { //数据库连接信息,需要一些配置,但是又不能写在这个类中(硬编码,改的时候麻烦) private String jdbcUrl = "..."; private String driverClass; private String username; private String password; // ... } 把这些配置信息放在外部的一个配置文件中:

spring Ioc Aop整合

之前用DWP项目做spring的IOC,xml总是提示有问题,之后改用maven通过. 之后将这一块的内容补充. 仔细考虑一下spring 的IOC是无处不在的,演示Aop也需要依赖spring的IOC. spring Aop例子. 本文例子在http://www.blogjava.net/javadragon/archive/2006/12/03/85115.html基础上进行些许修改,首先项目结构图: 其次运行结果图: 最开始的pom文件(property与dependency可以复制) <

IOC.AOP

ioc就是控制翻转或是依赖注入.通俗的讲就是如果在什么地方需要一个对象,你自己不用去通过new 生成你需要的对象,而是通过spring的bean工厂为你长生这样一个对象.aop就是面向切面的编程.比如说你每做一次对数据库操作,都要生成一句日志.如果,你对数据库的操作有很多类,那你每一类中都要写关于日志的方法.但是如果你用aop,那么你可以写一个方法在这个方法中有关于数据库操作的方法,每一次调用这个方法的时候,就加上生成日志的操作. IOC(反转控制):对成员变量的赋值的控制权从代码中反转到配置文

Unity 处理IOC AOP

用Unity 可以做IOC(控制反转) AOP(切面)可以做统一的异常和日志处理,非常方便,项目中是用微软企业库中的Microsoft.Practices.Unity实现 1 定义接口与实现 //定义接口 public interface IProductService { string GetProduct(); } //实现接口 public class ProductService:IProductService { public string GetProduct() { int i =

Castle.Windsor IOC/AOP的使用

Castle最早在2003年诞生于Apache Avalon项目,目的是为了创建一个IOC(控制反转)框架.发展到现在已经有4个组件了,分别是ActiveRecord(ORM组件).Windsor(IOC组件).DynamicProxy(动态代理组件).MonoRail(Web MVC组件). 这里我们要学习的是Windsor组件,Windsor是Castle提供的一个IOC框架. 使用之前,首先需要引用两个DLL,分别是:Castle.Core 和 Castle.Windsor. IOC(控制