《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编程思想学习(八) 内部类
可以将一个类的定义放在另一个类的定义内部,这就是内部类. 内部类的定义是简单的,但是它的语法确实很是复杂,让人不是很好理解.下面就内部类做一个小结. 一.内部类的分类 总的来讲内部类分为普通内部类,匿 ...
随机推荐
- Koa2 + Mongoose + Log4js 持久化日志
代码地址如下:http://www.demodashi.com/demo/12466.html 之前做的项目是采用 Express 框架进行搭建的,其中的日志管理采用了 winston + Post ...
- prop()方法和attr()方法以及区别
prop()方法: prop() 方法设置或返回被选元素的属性和值. 当该方法用于返回属性值时,则返回第一个匹配元素的值. 当该方法用于设置属性值时,则为匹配元素集合设置一个或多个属性/值对. 注意: ...
- iphone、ipod Touch、ipad触屏时的js事件
1.Touch事件简介 pc上的web页面鼠 标会产生onmousedown.onmouseup.onmouseout.onmouseover.onmousemove的事件,但是在移动终端如 ipho ...
- ubuntu boost.python
安装boost(未尝试只安装 libboost-python-dev) sudo apt-get install libboost-all-dev 新建hello_ext.cpp,输入以下代码 1 c ...
- 解决ListView滑动时出现黑边的问题
[声明]转载请注明出处,此文出自指尖飞落的博客:http://blog.csdn.net/huntersnail --尊重作者,知识无价.交流无限! 两种方法 1.代码去边缘线 myList.setF ...
- android自己定义TextView
Android控件中的TextView控件仅仅有一个输入框.可是为了用于的操作方便我们应该实现一些功能: 1. 能够直接将内容删除的功能button 2. 可以记录用户曾经输入的数据,同一时候可以将数 ...
- programming review (c++): (1)vector, linked list, stack, queue, map, string, bit manipulation
编程题常用知识点的review. most important: 想好(1)详尽步骤(2)边界特例,再开始写代码. I.vector #include <iostream> //0.头文件 ...
- asp.net mvc 中"未找到路径“/favicon.ico”的控制器或该控制器未实现 IController。"
FavIcon.ico是一个特殊的文件,它是浏览器请求一个网站时出现的.某些浏览器在书签和收藏夹中使用这个图标.在与这些图标相关的网站被打开时,某些浏览器也在标题栏或浏览器标签中中显示这个图标. 当一 ...
- /etc/init.d/iptables stop
/etc/init.d/iptables stop systemctl stop firewalld.service [root@bigdata-server-01 myrestserve ...
- CentOS、乌班图设置固定静态IP
CentOS.乌班图设置固定静态IP 一.centOS 1.编辑 ifcfg-eth0 文件 # vim /etc/sysconfig/network-scripts/ifcfg-eth0 2,在文件 ...