首页 / 设计模式 / 设计模式:策略、代理、单例
设计模式:策略、代理、单例
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了设计模式:策略、代理、单例,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4630字,纯文字阅读大概需要7分钟。
内容图文
![设计模式:策略、代理、单例](/upload/InfoBanner/zyjiaocheng/1309/a423b689b3a74ca39f5d08f0af9e2d41.jpg)
一. 策略模式
定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
先说这个场景中的要素:三个妙计,一个锦囊,一个赵云。
1)妙计:(一个接口,三个具体妙计)
1 package com.henry.strategy; 2 3 public interface IStrategy { 4 5 public void operate(); 6 7 }
1 package com.henry.strategy; 2 3 public class BackDoor implements IStrategy { 4 5 @Override 6publicvoid operate() { 7// TODO Auto-generated method stub 8 System.out.println("找乔国老帮忙,让吴国太给孙权施加压力"); 9 } 1011 }
1 package com.henry.strategy; 2 3 public class GivenGreenLight implements IStrategy { 4 5 @Override 6publicvoid operate() { 7// TODO Auto-generated method stub 8 System.out.println("求吴国太开个绿灯,放行!"); 9 } 1011 }
1 package com.henry.strategy; 2 3 public class BlockEnemy implements IStrategy { 4 5 @Override 6publicvoid operate() { 7// TODO Auto-generated method stub 8 System.out.println("孙夫人断后,挡住追兵"); 9 } 1011 }
2)接下来就是锦囊了,用来放妙计的东东。
1 package com.henry.strategy; 2 3 public class Context { 4 5 private IStrategy strategy; 6 7 public Context(IStrategy strategy) { 8 this.strategy = strategy; 9 } 1011publicvoid operate() { 12this.strategy.operate(); 13 } 14 }
3) 最后就是赵子龙登场的时候了。
1 package com.henry.strategy; 2 3 public class ZhaoYun { 4 5 public static void main(String[] args) { 6 Context context; 7 8 // 刚刚到吴国的时候拆第一个 9 System.out.println("-----------刚刚到吴国的时候拆第一个-------------"); 10 context = new Context(new BackDoor()); //拿到妙计11 context.operate(); //拆开执行12 System.out.println(""); 1314//刘备乐不思蜀了,拆第二个了15 System.out.println("-----------刘备乐不思蜀了,拆第二个了-------------"); 16 context = new Context(new GivenGreenLight()); 17 context.operate(); //执行了第二个锦囊了18 System.out.println(""); 1920//孙权的小兵追了,咋办?拆第三个21 System.out.println("-----------孙权的小兵追了,咋办?拆第三个-------------"); 22 context = new Context(new BlockEnemy()); 23 context.operate(); //孙夫人退兵24 System.out.println(""); 25 } 2627 }
二. 代理模式
定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
场景:比如西门庆找潘金莲,那潘金莲不好意思答复呀,咋办,找那个王婆做代理,表现在程序上时这样的:
1) 先定义一种类型的女人:
1 package com.henry.proxy; 2 3 public interface KindWomen { 4 5 public void makeEyesWithMan(); 6 public void happyWithMan(); 7 8 }
2) 再定一个丑陋的王婆:
1 package com.henry.proxy; 2 3 public class WangPo implements KindWomen { 4 5private KindWomen kindWomen; 6 7public WangPo() { 8this.kindWomen = new PanJinLian(); 9 } 1011public WangPo(KindWomen kindWomen) { 12this.kindWomen = kindWomen; 13 } 1415 @Override 16publicvoid makeEyesWithMan() { 17// TODO Auto-generated method stub18this.kindWomen.makeEyesWithMan(); 19 } 2021 @Override 22publicvoid happyWithMan() { 23// TODO Auto-generated method stub24this.kindWomen.happyWithMan(); 25 } 2627 }
3) 两个女主角都上场了,男主角也该出现了:
1 package com.henry.proxy; 2 3 public class XiMenQing { 4 5 public static void main(String[] args) { 6 WangPo wangPo = new WangPo(); 7 8 wangPo.makeEyesWithMan(); 9 wangPo.happyWithMan(); 10 } 1112 }
那这就是活生生的一个例子,通过代理人实现了某种目的,如果真去掉王婆这个中间环节,直接是西
门庆和潘金莲勾搭,估计很难成就武松杀嫂事件。
那我们再考虑一下,水浒里还有没有这类型的女人?有,卢俊义的老婆贾氏(就是和那个固管家苟合
的那个),这名字起的:“假使”,那我们也让王婆做她的代理:
4)把贾氏素描出来:
1 package com.henry.proxy; 2 3 public class JiaShi implements KindWomen { 4 5 @Override 6publicvoid makeEyesWithMan() { 7// TODO Auto-generated method stub 8 System.out.println("贾氏抛媚眼"); 9 } 1011 @Override 12publicvoid happyWithMan() { 13// TODO Auto-generated method stub14 System.out.println("贾氏正在happy中......"); 15 } 1617 }
5) 西门庆勾贾氏:
1 package com.henry.proxy; 2 3 public class XiMenQing2 { 4 5 public static void main(String[] args) { 6 JiaShi jiaShi = new JiaShi(); 7 WangPo wangPo = new WangPo(jiaShi); 8 9 wangPo.makeEyesWithMan(); 10 wangPo.happyWithMan(); 11 } 1213 }
三. 单例模式
1 package com.henry.singleton; 2 3 public class Emperor { 4 private static Emperor emperor = null; 5 6private Emperor() { 7 } 8 9publicstatic Emperor getInstance() { 10if(emperor == null) { 11 emperor = new Emperor(); 12 } 13return emperor; 14 } 1516publicstaticvoid emperorInfo(){ 17 System.out.println("我就是皇帝asdasdsdssd"); 18 } 19 }
1 package com.henry.singleton; 2 3 public class Minister { 4 public static void main(String[] args) { 5 // First Day 6 Emperor emperor1 = Emperor.getInstance(); 7 emperor1.emperorInfo(); 8 9//Second day10 Emperor emperor2 = Emperor.getInstance(); 11 emperor2.emperorInfo(); 1213//Third day14 Emperor emperor3 = Emperor.getInstance(); 15 emperor3.emperorInfo(); 16 } 17 }
原文:http://www.cnblogs.com/fanszone/p/4024644.html
内容总结
以上是互联网集市为您收集整理的设计模式:策略、代理、单例全部内容,希望文章能够帮你解决设计模式:策略、代理、单例所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。