《java编程思想》:设计模式(不定期更新)
1.策略设计模式
创建一个能够根据所传递的参数对象的不同而具有不同的方法,被称为策略设计模式。这类方法包含索要执行的算法中固定不变的部分,而“策略”包含变化的部分。策略就是传递进去的参数对象。在下面的代码示例中,Process对象就是策略。应用在了s上。
代码示例:
class Process {
public String getName(){
return getClass().getSimpleName();
}
Object process(Object input){
return input;
}
}
class Upcase extends Process {
String process(Object input){
return ((String)input).toUpperCase();
}
}
class Lowercase extends Process {
String process(Object input){
return ((String)input).toLowerCase();
}
}
public class Strategy{
public static void process(Process p,Object s){
System.out.println("Using Process " + p.getName());
System.out.println(p.process(s));
}
public static String s="this is strategy design model!";
public static void main(String[] args) {
process(new Upcase(),s);
process(new Lowercase(),s);
}
}
输出:
Using Process Upcase
THIS IS STRATEGY DESIGN MODEL!
Using Process Lowercase
this is strategy design model!
2.适配器设计模式
接收所拥有的接口,产生所需要的接口。
代码示例:
public class adapter {
public static void main(String[] args) {
new Ademo(new Bdemo()).getBMethod();
}
}
class Ademo{
Bdemo b;
public Ademo(Bdemo b){
this.b = b;
}
public void getBMethod(){
b.out();
}
}
class Bdemo{
void out(){
System.out.println("use b's mothod!");
}
}
输出:
use b's mothod!
3.工厂设计模式
3.1 普通工厂:
用于生成遵循某个接口的对象。
代码示例:
public class factory {
public static void main(String[] args) {
Service a = ServiceFactory.getDemoA();
a.out();
Service b = ServiceFactory.getDemoB();
b.out();
}
}
interface Service{
void out();
}
class demoA implements Service{
@Override
public void out() {
System.out.println("i am dome_a !");
}
}
class demoB implements Service{
@Override
public void out() {
System.out.println("i am dome_b !");
}
}
class ServiceFactory{
public static Service getDemoA(){
return new demoA();
}
public static Service getDemoB(){
return new demoB();
}
}
输出:
i am dome_a !
i am dome_b !
3.2 使用匿名内部类工厂:
代码示例:
public class InnerClassFactory {
public static void playGame(GameFactory factory){
Game game = factory.getGame();
game.play();
}
public static void main(String[] args) {
playGame(Football.factory);
playGame(Basketball.factory);
}
}
interface Game{
void play();
}
interface GameFactory{
Game getGame();
}
class Football implements Game{
@Override
public void play() {
System.out.println("play football game!");
}
public static GameFactory factory = new GameFactory(){
@Override
public Game getGame() {
return new Football();
}
};
}
class Basketball implements Game{
@Override
public void play() {
System.out.println("play basketball game!");
}
public static GameFactory factory = new GameFactory(){
@Override
public Game getGame() {
return new Basketball();
}
};
}
输出:
play football game!
play basketball game!
注:相较而言,普通工厂在项目中的使用较多一些,而第二种匿名内部类工厂模式,使用较少。
《java编程思想》:设计模式(不定期更新)的更多相关文章
- Java编程思想—读书笔记(更新中)
第1章 对象导论 1.4 被隐藏的具体实现 访问控制的原因: 让客户端程序员无法触及他们不应该触及的部分(不是用户解决特定问题所需的接口的一部分) 允许库设计者可以改变类内容的工作方式而不用担心会影响 ...
- JAVA编程思想(第四版)学习笔记----4.8 switch(知识点已更新)
switch语句和if-else语句不同,switch语句可以有多个可能的执行路径.在第四版java编程思想介绍switch语句的语法格式时写到: switch (integral-selector) ...
- 《Java编程思想》读书笔记
前言 这个月一直没更新,就是一直在读这本<Java编程思想>,这本书可以在Java业界被传神的一本书,无论谁谈起这本书都说好,不管这个人是否真的读过这本书,都说啊,这本书很好.然后再看这边 ...
- 《Java编程思想》阅读笔记二
Java编程思想 这是一个通过对<Java编程思想>(Think in java)进行阅读同时对java内容查漏补缺的系列.一些基础的知识不会被罗列出来,这里只会列出一些程序员经常会忽略或 ...
- Java编程思想(第4版) 中文清晰PDF完整版
Java编程思想(第4版) 中文清晰PDF完整版 [日期:2014-08-11] 来源:Linux社区 作者:Linux [字体:大 中 小] <Java编程思想>这本书赢得了全 ...
- 《Java编程思想》读书笔记(二)
三年之前就买了<Java编程思想>这本书,但是到现在为止都还没有好好看过这本书,这次希望能够坚持通读完整本书并整理好自己的读书笔记,上一篇文章是记录的第一章到第十章的内容,这一次记录的是第 ...
- 《Java编程思想》读书笔记(四)
前言:三年之前就买了<Java编程思想>这本书,但是到现在为止都还没有好好看过这本书,这次希望能够坚持通读完整本书并整理好自己的读书笔记,上一篇文章是记录的第十七章到第十八章的内容,这一次 ...
- 《Java编程思想》读书笔记(五)
前言:本文是<Java编程思想>读书笔记系列的最后一章,本章的内容很多,需要细读慢慢去理解,文中的示例最好在自己电脑上多运行几次,相关示例完整代码放在码云上了,码云地址:https://g ...
- Java编程思想重点笔记(Java开发必看)
Java编程思想重点笔记(Java开发必看) Java编程思想,Java学习必读经典,不管是初学者还是大牛都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面试过程中,而 ...
- Java编程思想学习(八) 内部类
可以将一个类的定义放在另一个类的定义内部,这就是内部类. 内部类的定义是简单的,但是它的语法确实很是复杂,让人不是很好理解.下面就内部类做一个小结. 一.内部类的分类 总的来讲内部类分为普通内部类,匿 ...
随机推荐
- Android · PendingIntent学习
Intent 是及时启动,intent 随所在的activity 消失而消失 PendingIntent用于处理即将发生的事情.比如在通知Notification中用于跳转页面,但不是马上跳转. ...
- p90x 涵盖了全部方式的健身方式美国经典训练DVD
http://baike.baidu.com/view/2602721.htm p90x是美国经典训练DVD, 涵盖了全部方式的健身方式13张Beachbody P90X DVD全集,90天魔鬼训练 ...
- Spring Cloud Zuul API服务网关之请求路由
目录 一.Zuul 介绍 二.构建Spring Cloud Zuul网关 构建网关 请求路由 请求过滤 三.路由详解 一.Zuul 介绍 通过前几篇文章的介绍,我们了解了Spring Cloud ...
- HDFS源码分析之数据块Block、副本Replica
我们知道,HDFS中的文件是由数据块Block组成的,并且为了提高容错性,每个数据块Block都会在不同数据节点DataNode上有若干副本Replica.那么,什么是Block?什么又是Replic ...
- Spark源码分析之二:Job的调度模型与运行反馈
在<Spark源码分析之Job提交运行总流程概述>一文中,我们提到了,Job提交与运行的第一阶段Stage划分与提交,可以分为三个阶段: 1.Job的调度模型与运行反馈: 2.Stage划 ...
- WPF自定义选择年月控件详解
本文实例为大家分享了WPF自定义选择年月控件的具体代码,供大家参考,具体内容如下 封装了一个选择年月的控件,XAML代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...
- ASP.NET动态网站制作(1)--html
前言:正式上课的第一课,讲的是前端部分的最基础内容:html. 前端:html,css,js 数据库:sql server 动态部分:.net,c#... IIS(Internet Informati ...
- Python常用变量处理手记(拼接数字,转json)
1.拼接字符串和数字时,应先把数字做转换 如,bytes(page) 再做拼接:str+page 或者 s = 'abc' print s + str(1) #abc1 使用list和tuple 参考 ...
- Git --恢复修改的文件
对于恢复修改的文件,就是将文件从仓库中拉到本地工作区,即 仓库区 ----> 暂存区 ----> 工作区. 对于修改的文件有两种情况: 只是修改了文件,没有任何 git 操作 修改了文件, ...
- 前端要给力之:语句在JavaScript中的值
文件夹 文件夹 问题是语句有值吗 那么说你骗我咯 有啥米用呢 研究这个是不是闲得那个啥疼 ES5ES6有什么差异呢 结论是ES6是改了规则但更合理 最后不不过if语句 这两天在写语言精髓那本书的第三版 ...