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编程思想》:设计模式(不定期更新)的更多相关文章

  1. Java编程思想—读书笔记(更新中)

    第1章 对象导论 1.4 被隐藏的具体实现 访问控制的原因: 让客户端程序员无法触及他们不应该触及的部分(不是用户解决特定问题所需的接口的一部分) 允许库设计者可以改变类内容的工作方式而不用担心会影响 ...

  2. JAVA编程思想(第四版)学习笔记----4.8 switch(知识点已更新)

    switch语句和if-else语句不同,switch语句可以有多个可能的执行路径.在第四版java编程思想介绍switch语句的语法格式时写到: switch (integral-selector) ...

  3. 《Java编程思想》读书笔记

    前言 这个月一直没更新,就是一直在读这本<Java编程思想>,这本书可以在Java业界被传神的一本书,无论谁谈起这本书都说好,不管这个人是否真的读过这本书,都说啊,这本书很好.然后再看这边 ...

  4. 《Java编程思想》阅读笔记二

    Java编程思想 这是一个通过对<Java编程思想>(Think in java)进行阅读同时对java内容查漏补缺的系列.一些基础的知识不会被罗列出来,这里只会列出一些程序员经常会忽略或 ...

  5. Java编程思想(第4版) 中文清晰PDF完整版

    Java编程思想(第4版) 中文清晰PDF完整版 [日期:2014-08-11] 来源:Linux社区  作者:Linux [字体:大 中 小]     <Java编程思想>这本书赢得了全 ...

  6. 《Java编程思想》读书笔记(二)

    三年之前就买了<Java编程思想>这本书,但是到现在为止都还没有好好看过这本书,这次希望能够坚持通读完整本书并整理好自己的读书笔记,上一篇文章是记录的第一章到第十章的内容,这一次记录的是第 ...

  7. 《Java编程思想》读书笔记(四)

    前言:三年之前就买了<Java编程思想>这本书,但是到现在为止都还没有好好看过这本书,这次希望能够坚持通读完整本书并整理好自己的读书笔记,上一篇文章是记录的第十七章到第十八章的内容,这一次 ...

  8. 《Java编程思想》读书笔记(五)

    前言:本文是<Java编程思想>读书笔记系列的最后一章,本章的内容很多,需要细读慢慢去理解,文中的示例最好在自己电脑上多运行几次,相关示例完整代码放在码云上了,码云地址:https://g ...

  9. Java编程思想重点笔记(Java开发必看)

    Java编程思想重点笔记(Java开发必看)   Java编程思想,Java学习必读经典,不管是初学者还是大牛都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面试过程中,而 ...

  10. Java编程思想学习(八) 内部类

    可以将一个类的定义放在另一个类的定义内部,这就是内部类. 内部类的定义是简单的,但是它的语法确实很是复杂,让人不是很好理解.下面就内部类做一个小结. 一.内部类的分类 总的来讲内部类分为普通内部类,匿 ...

随机推荐

  1. javascript判断智能终端信息

    < script type = "text/javascript" > /* * 智能机浏览器版本信息: * */ var browser = { versions: ...

  2. Java提高篇

    http://www.cnblogs.com/chenssy/p/3850230.html http://www.cnblogs.com/chenssy/p/3521565.html http://w ...

  3. window+Jira+SQL Server

    window下Jira+SQL Server部署+汉化+破解(亲测2018.5) 网上很多都是jira+mysql部署的文章,由于我现在有需求要用SQL Server数据库,因此就动手试了一下,参考网 ...

  4. C#中的let字句应用示例

    一.应用场景 在查询表达式中,存储子表达式的结果有时很有用,这样可以在随后的子句中使用. 可以使用 let 关键字完成这一工作,该关键字可以创建一个新的范围变量,并且用您提供的表达式的结果初始化该变量 ...

  5. alibaba canal安装笔记

    canal是alibaba开源的基于mysql binlog解析工具,可利用它实现mysql增量订阅/消费,典型的应用场景如下图: 利用canal,可以将mysql的数据变化,通过解析binlog,投 ...

  6. ios 添加全屏返回手势

    1 建立导航控制器 2.导航控制器添加如下代码 - (void)viewDidLoad { [super viewDidLoad]; id target = self.interactivePopGe ...

  7. ch.poweredge.ntlmv2-auth

    <dependency> <groupId>ch.poweredge.ntlmv2-auth</groupId> <artifactId>ntlmv2- ...

  8. word操作

  9. Wix Burn运行64位dism.exe的问题

    主要的问题是Burn是一个32位程序,在64位机器上它启动的进程都会被重定向到wow64目录下,也就是说它运行的dism.exe最终会是32位的.解决的方法就是用wix提供的QtExec64CmdLi ...

  10. 常见C C++问题(转)

    这一部分是C/C++程序员在面试的时候会被问到的一些题目的汇总.来源于基本笔试面试书籍,可能有一部分题比较老,但是这也算是基础中的基础,就归纳归纳放上来了.大牛们看到一笑而过就好,普通人看看要是能补上 ...