美文网首页
面向过程 到 面向对象,面向接口,面向切面

面向过程 到 面向对象,面向接口,面向切面

作者: 压根儿没快乐过 | 来源:发表于2017-09-25 09:28 被阅读0次

[TOC]

过程:搅拌水泥,拉砖头,请工人,粉刷墙壁等等,一系列非常 琐碎的事情,

对象:砌墙!

接口:这里,建立一个厕所,这里建立一个客厅!

切面:就这么理解吧,假如你和女友约会,

周五:女友出门之前需要 洗澡,洗头,化妆,(吃饭),卸妆,洗澡,睡觉

周六:女友出门之前需要 洗澡,洗头,化妆,(喝饮料),卸妆,洗澡,睡觉

周日:女友出门之前需要 洗澡,洗头,化妆,(去游乐园),卸妆,洗澡,睡觉

你能接触的,就是很女友 吃喝玩乐,

一:面向过程

public class Test {  
  
    public static void main(String[] args) {  
        System.out.println("第一个女孩子洗澡");  
        System.out.println("穿衣服");  
        System.out.println("化妆");  
        System.out.println("*****************");  
        System.out.println("周6"+"吃肯德基");  
        System.out.println("*****************");  
        System.out.println("卸妆");  
        System.out.println("洗澡");  
        System.out.println("睡觉");  
          
        System.out.println("第二个女孩子洗澡");  
        System.out.println("穿衣服");  
        System.out.println("化妆");  
        System.out.println("*****************");  
        System.out.println("周6"+"吃肯德基");  
        System.out.println("*****************");  
        System.out.println("卸妆");  
        System.out.println("洗澡");  
        System.out.println("睡觉");  
          
          
        System.out.println("第一个女孩子洗澡");  
        System.out.println("穿衣服");  
        System.out.println("化妆");  
        System.out.println("*****************");  
        System.out.println("周日"+"约会");  
        System.out.println("*****************");  
        System.out.println("卸妆");  
        System.out.println("洗澡");  
        System.out.println("睡觉");  
          
        System.out.println("第二个女孩子洗澡");  
        System.out.println("穿衣服");  
        System.out.println("化妆");  
        System.out.println("*****************");  
        System.out.println("周日"+"约会");  
        System.out.println("*****************");  
        System.out.println("卸妆");  
        System.out.println("洗澡");  
        System.out.println("睡觉");  
  
    }  
  
}  

二:面向对象

public class Girl1 {  
      
    public void KFC(String datetime){  
        System.out.println("洗澡");  
        System.out.println("穿衣服");  
        System.out.println("化妆");  
        System.out.println("*****************");  
        System.out.println("我是第一个女孩");  
        System.out.println(datetime+"吃肯德基");  
        System.out.println("*****************");  
        System.out.println("卸妆");  
        System.out.println("洗澡");  
        System.out.println("睡觉");  
    }  
      
    public void meet(String datetime){  
        System.out.println("洗澡");  
        System.out.println("穿衣服");  
        System.out.println("化妆");  
        System.out.println("*****************");  
        System.out.println("我是第一个女孩");  
        System.out.println(datetime+"约会");  
        System.out.println("*****************");  
        System.out.println("卸妆");  
        System.out.println("洗澡");  
        System.out.println("睡觉");  
    }  
  
} 
public class Girl2 {  
      
    public void KFC(String datetime){  
        System.out.println("洗澡");  
        System.out.println("穿衣服");  
        System.out.println("化妆");  
        System.out.println("*****************");  
        System.out.println("我是第二个女孩");  
        System.out.println(datetime+"吃肯德基");  
        System.out.println("*****************");  
        System.out.println("卸妆");  
        System.out.println("洗澡");  
        System.out.println("睡觉");  
    }  
      
    public void meet(String datetime){  
        System.out.println("洗澡");  
        System.out.println("穿衣服");  
        System.out.println("化妆");  
        System.out.println("*****************");  
        System.out.println("我是第二个女孩");  
        System.out.println(datetime+"约会");  
        System.out.println("*****************");  
        System.out.println("卸妆");  
        System.out.println("洗澡");  
        System.out.println("睡觉");  
    }  
  
}  
public class Test {  
  
    public static void main(String[] args) {  
        Girl1 g1 = new Girl1();  
        Girl2 g2 = new Girl2();  
        g1.KFC("周六");  
        g1.meet("周日");  
  
        g2.KFC("周六");  
        g2.meet("周日");  
    }  
  
}  

三:面向接口

2个女孩的没有变动

public interface Girl {  
    public void KFC(String datetime);  
    public void meet(String datetime);  
}
public class Test {  
  
    public static void main(String[] args) {  
        Girl g1 = new Girl1();  
        Girl g2 = new Girl2();  
          
        g1.KFC("周六");  
        g1.meet("周日");  
  
        g2.KFC("周六");  
        g2.meet("周日");  
    }  
  
}  

四:面向切面

public class GirlProxy implements Girl {  
    private Girl g;  
      
    public GirlProxy(String name){  
        if ("girl1".equals(name)){  
            g = new Girl1();  
        }else if ("girl2".equals(name)){  
            g = new Girl2();  
        }  
    }  
  
    @Override  
    public void KFC(String datetime) {  
        g.KFC(datetime);  
    }  
  
    @Override  
    public void meet(String datetime) {  
        g.meet(datetime);  
    }  
  
}  

/* 
 * 增加一个代理类,类似与明星的经纪人 
 * 把核心的业务逻辑的代码 和 非核心的 分离 
 * 把非核心的代码交给经纪人(proxy)去管理, 
 * 注意:经纪人和要明星,必须实现同一个接口 
 */  
public class Test {  
  
    public static void main(String[] args) {  
        Girl g1 = new GirlProxy("girl1");  
        Girl g2 = new GirlProxy("girl2");  
          
        g1.KFC("周六");  
        g1.meet("周日");  
  
        g2.KFC("周六");  
        g2.meet("周日");  
    }  
  
} 

五:面向漆面

Girl 接口没有变

public class Girl1 implements Girl{  
      
    public void KFC(String datetime){  
          
        System.out.println("[核心业务逻辑]我是第一个女孩");  
        System.out.println("[核心业务逻辑]"+datetime+"吃肯德基");  
    }  
      
    public void meet(String datetime){  
      
        System.out.println("[核心业务逻辑]我是第一个女孩");  
        System.out.println("[核心业务逻辑]"+datetime+"约会");  
          
    }  
  
}  
public class Girl2 implements Girl {  
      
    public void KFC(String datetime){  
        System.out.println("[核心业务逻辑]我是第二个女孩");  
        System.out.println("[核心业务逻辑]"+datetime+"吃肯德基");  
    }  
      
    public void meet(String datetime){  
        System.out.println("[核心业务逻辑]我是第二个女孩");  
        System.out.println("[核心业务逻辑]"+datetime+"约会");  
    }  
  
}  
public class GirlProxy implements Girl {  
    private Girl g;  
      
    public GirlProxy(String name){  
        if ("girl1".equals(name)){  
            g = new Girl1();  
        }else if ("girl2".equals(name)){  
            g = new Girl2();  
        }  
    }  
  
    @Override  
    public void KFC(String datetime) {  
        System.out.println("洗澡");  
        System.out.println("化妆");  
        System.out.println("穿衣服");  
        System.out.println("*****************");  
          
        g.KFC(datetime);  
          
        System.out.println("*****************");  
        System.out.println("卸妆");  
        System.out.println("洗澡");  
        System.out.println("睡觉");  
    }  
  
    @Override  
    public void meet(String datetime) {  
        System.out.println("洗澡");  
        System.out.println("化妆");  
        System.out.println("穿衣服");  
        System.out.println("*****************");  
          
        g.meet(datetime);  
          
        System.out.println("*****************");  
        System.out.println("卸妆");  
        System.out.println("洗澡");  
        System.out.println("睡觉");  
    }  
  
}  
public class Test {  
  
    public static void main(String[] args) {  
          
        Girl g1 = new GirlProxy("girl1");  
          
        Girl g2 = new GirlProxy("girl2");  
          
        g1.KFC("周六");  
        g1.meet("周日");  
  
        g2.KFC("周六");  
        g2.meet("周日");  
    }  
  
}  

六:动态代理

Girl,Girl1.java,Girl2.java 3个不变

GirlProxy.java删除了,换为GirlHandler.java

import java.lang.reflect.InvocationHandler;  
import java.lang.reflect.Method;  
  
public class GirlHandler implements InvocationHandler { //调用处理器  
  
    private Object targer;// 目标是不固定  
  
    public GirlHandler(Object targer) {  
        this.targer = targer;  
    }  
  
    /* 
     * return 返回是原来目标方法所返回的内容 method 就是要执行的方法 
     */  
    @Override  
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {  
          
        before();  
        // 具体的业务逻辑代码  
        // Object returnValue = targer.method(args);  
        Object returnValue = method.invoke(targer, args);  
  
        after();  
        return returnValue;  
    }  
  
    private void before() {  
        // 前置任务  
        System.out.println("[代理执行前置]洗澡");  
        System.out.println("[代理执行前置]化妆");  
        System.out.println("[代理执行前置]穿衣服");  
        System.out.println("*****************");  
    }  
  
    private void after() {  
        // 后置任务  
  
        System.out.println("*****************");  
        System.out.println("[代理执行后置]卸妆");  
        System.out.println("[代理执行后置]洗澡");  
        System.out.println("[代理执行后置]听歌");  
        System.out.println("");  
    }  
      
  
}  
import java.lang.reflect.Proxy;  
  
/* 
 * 增加一个【动态代理类】,类似与明星的经纪人 
 */  
public class Test {  
  
    public static void main(String[] args) {  
          
        //第一步:创建目标实现类的实例  
        Girl g1 = new Girl1();  
        Girl g2 = new Girl2();  
          
        //第二步:创建一个动态代理类(CEO 首席执行官)  
        GirlHandler handler1 = new GirlHandler(g1);  
        GirlHandler handler2 = new GirlHandler(g2);  
  
        //第三步:创建动态代理(跟静态代理一样,申明的变量仍然是目标的接口)  
        //创建一个宋喆  
        Girl girlProxy1 = (Girl) Proxy.newProxyInstance(  
                                    g1.getClass().getClassLoader(),  
                                    g1.getClass().getInterfaces(),  
                                    handler1);  
        girlProxy1.KFC("周六");  //对比 g1.KFC("周六"); 运行后的区别  
        girlProxy1.meet("周日");  
          
        Girl girlProxy2 = (Girl) Proxy.newProxyInstance(  
                                    g2.getClass().getClassLoader(),  
                                    g2.getClass().getInterfaces(),  
                                    handler2);  
        girlProxy2.KFC("周六");  //对比 g1.KFC("周六"); 运行后的区别  
        girlProxy2.meet("周日");  
          
  
    }  
  
}  

七:参考

http://blog.csdn.net/ssh159/article/details/52516986

相关文章

  • 面向过程 到 面向对象,面向接口,面向切面

    [TOC] 过程:搅拌水泥,拉砖头,请工人,粉刷墙壁等等,一系列非常 琐碎的事情, 对象:砌墙! 接口:这里,建立...

  • AOP(一)---什么是AOP

    要理解AOP我们先要理解其他一些概念: 面向过程编程 面向对象编程 面向切面编程 面向过程编程OPP 面向过程的编...

  • Python面向对象1

    Python支持多种编程方式:面向过程,面向对象,面向切面(装饰器部分)等 OOP思想 面向对象的基本哲学:世界是...

  • 探秘Spring AOP

    编程范式概览 主要有面向对象编程、面向过程编程、函数式编程、事件驱动编程、面向切面编程。面向过程编程是以过程为中心...

  • #30天专注成长计划#-DAY4-c#

    1、面向过程 面向对象 想吃煎饼 面向过程:拿着钱,从宿舍到煎饼摊。 面向对象:找个对象 帮你做事儿。 面向过程:...

  • Android 面向接口编程

    关键词:Android、POP、面向接口编程 、面向过程、面向协议 一、概述 面向接口编程是面向对象编程的一种实...

  • 2、面向对象

    一、面向对象 定义:面向对象是基于面向过程的。 面向对象与面向过程比较:面向过程:面向过程是以函数为基础,完成各种...

  • 面向对象的三大基本特征和五大设计原则

    1、面向对象概念 1.1、理解面向对象 面向对象是相对面向过程而言; 面向对象和面向过程都是一种思想; 面向过程:...

  • Java基础

    1.面向过程和面向对象区别 1.1面向过程:面向过程性能高于面向对象 1.2面向对象:面向对象易复用,易拓展,易维...

  • 类与对象的哲学关系

    从C到C++的发展历程可以全面了解面向过程到面向对象的过程 面向对象的概念: 理解面向对象: ...

网友评论

      本文标题:面向过程 到 面向对象,面向接口,面向切面

      本文链接:https://www.haomeiwen.com/subject/zjsrextx.html