门面模式

  门面模式(visitor)也要作外观模式, 是一种很是常见的封装模式,它的定义以下(额 模式开始前仍是说说他的定义,这样对他有个大概的认识会比较好进行阅读,至少我是这么感受的,甭管你懂不懂 , 可是 至少知道它是这么一回事 ,不求甚解在程序里面仍是很实用的, 记住不少概念,而后开始的时候彷佛不是很懂,可是彷佛在某个时候本身顿悟了,oh my god 原来门面模式是这么一回事)java

 

  每一个书里面都有本身的例子, 可是做为一个游戏开发者, 我会给出的是我作过的用在游戏中的例子编程

  我所作的游戏里面社交一块的关系又,好友,结拜 和结婚。安全

  咱们以两我的要结婚为例子。结婚的需求是两我的必须是好友,可是两我的不能有结拜关系。学习

  这是一个社交关系的子系统,跟其余的系统没有什么关系,也是使用门面模式的最佳场合。spa

  

  FriendManager.java 代码以下代理

public class FriendManager {
    private static FriendManager instance = null;
    
    private FriendManager(){
        
    }
    
    public static synchronized FriendManager getInst(){
        if( instance == null ){
            instance = new FriendManager();
        }
        return instance;
    }
    
    public boolean isFriend(String a , String b ){
        System.out.println("the  a and b is friend ");
        return true;
    }
}

 

MarryManager.java代码以下code

 

public class MarryManager {
    private static MarryManager marryManager = null;
    
    private MarryManager(){
        
    }
    
    public static synchronized MarryManager getInstance(){
        if(marryManager == null){
            marryManager = new MarryManager();
        }
        return marryManager;
    }
    
    public void marrySomeBody(String a , String b){
        System.out.println(a  + "marry with " +  b);
    }

}

 

JiebaiManager.java代码以下对象

 

public class JiebaiManager {
    
    private static JiebaiManager instance = null;
    
    private JiebaiManager(){
        
    }
    
    public static synchronized JiebaiManager getInst(){
        if(instance == null){
            instance = new JiebaiManager();
        }
        return instance;
    }
    
    public boolean isJiebai(String a ,String b){
        System.out.println( a +" is not jie bai with " + b);
        return false;
    }
}

 

 

最后一个类为门面类 , 也就是子系统提供服务的接口类 , 因为代码简单,因此没有用接口 ,可是在实际编程的时候,请面向接口编程, 这是个好习惯blog

 

SocietyManager.java继承

 

public class SocietyManager {
    
    public static void marry(String a , String b){
        if(! FriendManager.getInst().isFriend(a, b)){
            System.out.println("it's not friend  can't marry");
            return;
        }
        
        if( JiebaiManager.getInst().isJiebai(a, b)){
            System.out.println("jiebai can't marry");
        }
        
        MarryManager.getInstance().marrySomeBody(a , b);
    }
    
    
    public static void main(String[] args){
        
        SocietyManager.marry("join", "marry");
    }
}

 

场景也包含在了里面 运行结果为 

the a and b is friend
join is not jie bai with marry
joinmarry with marry

 

 

这就是门面模式

 

门面模式的优势是   封装的很是好,子系统比较复杂的时候 类的客户端不须要知道类的内部实现。

当门面类较大的时候能够考虑 将门面类扩展为多个, 保存一个门面的引用在另一个门面类的里面, 可让代码结构更加简单

 

门面模式减小了系统之间的相互依赖,若是不这样作  ,那么MarryManager.java在调用marry方法的时候 会直接 调用 FriendManager和JiebaiManager里面的方法 增长了耦合。

提升了系统的灵活性 ,无论  FriendManager , MarryManager,JiebaiManager如何变化, 只要不影响到结拜对象 ,能够自由活动

提升了安全性, 不经过门面 休想访问子系统里面的任何东西。

门面模式的缺点是 违背了开闭原则 , 当系统出现错误的时候 没法经过 继承 覆写解决  惟一能作的是修改门面模式的 代码

门面模式,代理模式,访问者模式   都是经过间隔的使用代理的类调用实际的类的方法 实现解耦。

 

学习之余的笔记,只是对本身学习的一个总结,不具有很强的学术性,  看看 罢了= = 

相关文章
相关标签/搜索