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

2017-09-25  本文已影响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

上一篇 下一篇

猜你喜欢

热点阅读