职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 1098|回复: 9

朋友做客(外观模式或者门面模式)

[复制链接]
木已 发表于 2011-9-3 10:32 | 显示全部楼层 |阅读模式
老鸟飞过


  
package facade;   
/**  
*   
* 在实际的开发过程中,往往需要将不同的两个层分离,  
* 比如mvc 三层架构  
* 业务层与表现层、持久层与业务层之间建立外观Facade,  
* 这样为新的系统提供简单的接口。  
*/  
//facade类 组合了 三个子系统(每个girl是独立的系统)   
public class Boy {   
      
    private BeautifulGirl beautifulGirl;   
    private LivelyGirl  livelyGirl;   
    private LooksMediocreGirl looksMediocreGirl;   
      
    Boy(){   
        beautifulGirl = new BeautifulGirl();   
        livelyGirl =new LivelyGirl();   
        looksMediocreGirl = new LooksMediocreGirl();   
    }   
      
    //我的朋友并不知道我有几个女友,因为女友是我私有的,但是给我朋友做饭的不是我,却是我的女友们。   
    //我的朋友到我家做客,他不了解我们家的情况,如果让我的朋友直接命令我的女友做家务,也许他会忙的忘记和我讲正事了(违背了单一职责)   
    //我朋友 1————1 我(facade) 1————n girls   
    //如果没有了我(facade),那么就变成了 我朋友 1————n girls   
    //如果我朋友是待开发的新系统, girls是老系统(之前实现了的)   
    //新系统需要用到老的系统提供服务,可是老系统很复杂,   
    //开发新系统的人可能不了解老系统是怎么实现的,   
    //那么facade 的出现就是提供给新系统 老系统的接口   
    public void  dinner_for_friend(Friend friend){   
           
        // if...else...可以考虑状态模式重构   
        if(  friend.getAges()<30){   
            this.methodA();   
        }else{   
            this.methodB();   
        }   
            
           
    }   
      
    public void methodA(){   
           
        beautifulGirl.do_it();   
        livelyGirl.do_something();   
        looksMediocreGirl.i_can_do();   
           
    }   
    public void methodB(){   
      
        looksMediocreGirl.i_can_do();   
        livelyGirl.do_something();   
        beautifulGirl.do_it();   
    }   
  
      
}  

package facade;
/**
*
* 在实际的开发过程中,往往需要将不同的两个层分离,
* 比如mvc 三层架构
* 业务层与表现层、持久层与业务层之间建立外观Facade,
* 这样为新的系统提供简单的接口。
*/
//facade类 组合了 三个子系统(每个girl是独立的系统)
public class Boy {
       
        private BeautifulGirl beautifulGirl;
        private LivelyGirl  livelyGirl;
        private LooksMediocreGirl looksMediocreGirl;
       
        Boy(){
                beautifulGirl = new BeautifulGirl();
                livelyGirl =new LivelyGirl();
                looksMediocreGirl = new LooksMediocreGirl();
        }
       
        //我的朋友并不知道我有几个女友,因为女友是我私有的,但是给我朋友做饭的不是我,却是我的女友们。
        //我的朋友到我家做客,他不了解我们家的情况,如果让我的朋友直接命令我的女友做家务,也许他会忙的忘记和我讲正事了(违背了单一职责)
        //我朋友 1————1 我(facade) 1————n girls
        //如果没有了我(facade),那么就变成了 我朋友 1————n girls
        //如果我朋友是待开发的新系统, girls是老系统(之前实现了的)
        //新系统需要用到老的系统提供服务,可是老系统很复杂,
        //开发新系统的人可能不了解老系统是怎么实现的,
        //那么facade 的出现就是提供给新系统 老系统的接口
        public void  dinner_for_friend(Friend friend){
               
                // if...else...可以考虑状态模式重构
                if(  friend.getAges()<30){
                        this.methodA();
                }else{
                        this.methodB();
                }
                 
               
        }
       
        public void methodA(){
               
                beautifulGirl.do_it();
                livelyGirl.do_something();
                looksMediocreGirl.i_can_do();
               
        }
        public void methodB(){
       
                looksMediocreGirl.i_can_do();
                livelyGirl.do_something();
                beautifulGirl.do_it();
        }

       
}
  
public class BeautifulGirl {   
      
    public void do_it(){   
           
        System.out.println("来杯咖啡");   
    }   
  
}  

public class BeautifulGirl {
       
        public void do_it(){
               
                System.out.println("来杯咖啡");
        }

}

  
public class LivelyGirl {   
      
      
    public void do_something(){   
           
        System.out.println("准备午餐");   
    }   
  
}  

public class LivelyGirl {
       
       
        public void do_something(){
               
                System.out.println("准备午餐");
        }

}

  
public class LooksMediocreGirl {   
  
    public void i_can_do(){   
           
        System.out.println("准备点心");   
           
    }   
      
}  

public class LooksMediocreGirl {

        public void i_can_do(){
               
                System.out.println("准备点心");
               
        }
       
}


  
public class Friend {   
      
    int ages;   
  
      
    public int getAges() {   
        return ages;   
    }   
  
    public void setAges(int ages) {   
        this.ages = ages;   
    }   
      
      
  
}  

public class Friend {
       
        int ages;

       
        public int getAges() {
                return ages;
        }

        public void setAges(int ages) {
                this.ages = ages;
        }
       
       

}


无处不在 发表于 2011-9-3 10:32 | 显示全部楼层
楼主对设计模式的理解应用到这些有趣的例子上,真是不错

走失的猫咪 发表于 2011-9-3 10:32 | 显示全部楼层
wujiazhao88 写道
楼主对设计模式的理解应用到这些有趣的例子上,真是不错

最近还是比较闲的,呵呵

无处不在 发表于 2011-9-3 10:32 | 显示全部楼层
ysen 写道
老鸟飞过


  
package facade;   
/**  
*   
* 在实际的开发过程中,往往需要将不同的两个层分离,  
* 比如mvc 三层架构  
* 业务层与表现层、持久层与业务层之间建立外观Facade,  
* 这样为新的系统提供简单的接口。  
*/  
//facade类 组合了 三个子系统(每个girl是独立的系统)   
public class Boy {   
      
    private BeautifulGirl beautifulGirl;   
    private LivelyGirl  livelyGirl;   
    private LooksMediocreGirl looksMediocreGirl;   
      
    Boy(){   
        beautifulGirl = new BeautifulGirl();   
        livelyGirl =new LivelyGirl();   
        looksMediocreGirl = new LooksMediocreGirl();   
    }   
      
    //我的朋友并不知道我有几个女友,因为女友是我私有的,但是给我朋友做饭的不是我,却是我的女友们。   
    //我的朋友到我家做客,他不了解我们家的情况,如果让我的朋友直接命令我的女友做家务,也许他会忙的忘记和我讲正事了(违背了单一职责)   
    //我朋友 1————1 我(facade) 1————n girls   
    //如果没有了我(facade),那么就变成了 我朋友 1————n girls   
    //如果我朋友是待开发的新系统, girls是老系统(之前实现了的)   
    //新系统需要用到老的系统提供服务,可是老系统很复杂,   
    //开发新系统的人可能不了解老系统是怎么实现的,   
    //那么facade 的出现就是提供给新系统 老系统的接口   
    public void  dinner_for_friend(Friend friend){   
           
        // if...else...可以考虑状态模式重构   
        if(  friend.getAges()<30){   
            this.methodA();   
        }else{   
            this.methodB();   
        }   
            
           
    }   
      
    public void methodA(){   
           
        beautifulGirl.do_it();   
        livelyGirl.do_something();   
        looksMediocreGirl.i_can_do();   
           
    }   
    public void methodB(){   
      
        looksMediocreGirl.i_can_do();   
        livelyGirl.do_something();   
        beautifulGirl.do_it();   
    }   
  
      
}  

package facade;
/**
*
* 在实际的开发过程中,往往需要将不同的两个层分离,
* 比如mvc 三层架构
* 业务层与表现层、持久层与业务层之间建立外观Facade,
* 这样为新的系统提供简单的接口。
*/
//facade类 组合了 三个子系统(每个girl是独立的系统)
public class Boy {
       
        private BeautifulGirl beautifulGirl;
        private LivelyGirl  livelyGirl;
        private LooksMediocreGirl looksMediocreGirl;
       
        Boy(){
                beautifulGirl = new BeautifulGirl();
                livelyGirl =new LivelyGirl();
                looksMediocreGirl = new LooksMediocreGirl();
        }
       
        //我的朋友并不知道我有几个女友,因为女友是我私有的,但是给我朋友做饭的不是我,却是我的女友们。
        //我的朋友到我家做客,他不了解我们家的情况,如果让我的朋友直接命令我的女友做家务,也许他会忙的忘记和我讲正事了(违背了单一职责)
        //我朋友 1————1 我(facade) 1————n girls
        //如果没有了我(facade),那么就变成了 我朋友 1————n girls
        //如果我朋友是待开发的新系统, girls是老系统(之前实现了的)
        //新系统需要用到老的系统提供服务,可是老系统很复杂,
        //开发新系统的人可能不了解老系统是怎么实现的,
        //那么facade 的出现就是提供给新系统 老系统的接口
        public void  dinner_for_friend(Friend friend){
               
                // if...else...可以考虑状态模式重构
                if(  friend.getAges()<30){
                        this.methodA();
                }else{
                        this.methodB();
                }
                 
               
        }
       
        public void methodA(){
               
                beautifulGirl.do_it();
                livelyGirl.do_something();
                looksMediocreGirl.i_can_do();
               
        }
        public void methodB(){
       
                looksMediocreGirl.i_can_do();
                livelyGirl.do_something();
                beautifulGirl.do_it();
        }

       
}
  
public class BeautifulGirl {   
      
    public void do_it(){   
           
        System.out.println("来杯咖啡");   
    }   
  
}  

public class BeautifulGirl {
       
        public void do_it(){
               
                System.out.println("来杯咖啡");
        }

}

  
public class LivelyGirl {   
      
      
    public void do_something(){   
           
        System.out.println("准备午餐");   
    }   
  
}  

public class LivelyGirl {
       
       
        public void do_something(){
               
                System.out.println("准备午餐");
        }

}

  
public class LooksMediocreGirl {   
  
    public void i_can_do(){   
           
        System.out.println("准备点心");   
           
    }   
      
}  

public class LooksMediocreGirl {

        public void i_can_do(){
               
                System.out.println("准备点心");
               
        }
       
}


  
public class Friend {   
      
    int ages;   
  
      
    public int getAges() {   
        return ages;   
    }   
  
    public void setAges(int ages) {   
        this.ages = ages;   
    }   
      
      
  
}  

public class Friend {
       
        int ages;

       
        public int getAges() {
                return ages;
        }

        public void setAges(int ages) {
                this.ages = ages;
        }
       
       

}



江南枫 发表于 2011-9-3 10:32 | 显示全部楼层
很好,简单易懂.

话说我当年 发表于 2011-9-3 10:33 | 显示全部楼层
我觉得楼主应该在门面类型对象用容器来容纳其他的子系统更好~!如果子对象如果特别多
估计提供给客户端的门面对象非常庞大 维护不方便,浅见。。

yoyo 发表于 2011-9-3 10:33 | 显示全部楼层
讲的不错 很好理解

gz-vps 发表于 2011-9-3 10:33 | 显示全部楼层
讲的很一般,没看出哪儿好。
之所以这么说,是因为我没看懂,哈哈!

broken 发表于 2011-9-3 10:33 | 显示全部楼层
methodA 和methodB 应该改为 私有访问更好吧

北大青鸟 发表于 2011-9-3 10:33 | 显示全部楼层
最近正在看设计模式有关的书籍,向楼主学习了!
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-5-3 16:48 , Processed in 0.165347 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表