门面模式(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如何变化, 只要不影响到结拜对象 ,能够自由活动
提升了安全性, 不经过门面 休想访问子系统里面的任何东西。
门面模式的缺点是 违背了开闭原则 , 当系统出现错误的时候 没法经过 继承 覆写解决 惟一能作的是修改门面模式的 代码
门面模式,代理模式,访问者模式 都是经过间隔的使用代理的类调用实际的类的方法 实现解耦。
学习之余的笔记,只是对本身学习的一个总结,不具有很强的学术性, 看看 罢了= =