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

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

作者: 压根儿没快乐过 | 来源:发表于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

    相关文章

      网友评论

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

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