- 浏览: 348820 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
bsc2xp:
作者的文章不错,但是程序好像有错误:1、StreamFilte ...
Java6.0新特性之StAX--全面解析Java XML分析技术 -
bystander_:
写的真好啊, 牛
JAVA面试题解惑系列合集恢复下载 -
qdp150273:
想下载,怎么下载不了
《JAVA面试题解惑系列合集》PDF电子书下载 -
qdp150273:
不错啊,受益匪浅
《JAVA面试题解惑系列合集》PDF电子书下载 -
miroki:
感谢分享!
JAVA面试题解惑系列合集恢复下载
1、复合(Complex)模式部分
*模式通常被一起使用,并被组合在同一个设计解决方案中。
*复合模式在一个解决方案中结合两个或多个模式,以解决一般或重复发生的问题。
Sharpen your pencil解答:
Sharpen your pencil解答:
Sharpen your public解答:
*使用组合(Compose)模式时,需要在安全性和透明性之间折中选择。
2、MVC模式部分(模型Model-视图View-控制器Controller)
*视图(View):用来呈现模型。视图通常直接从模型中取得它需要显示的数据和状态。
*控制器(Controller):取得用户的输入并解读其对模型的含义。
*模型(Model):模型持有所有的数据、状态和程序逻辑。模型没有注意到视图和控制器,虽然它提供了操纵和检索状态的接口,并发送状态改变通知给观察者。
*不把控制器的代码(解读视图的输入并操纵模型)放到模型中的原因有两个:
*MVC和JSP Model 2都属于复合模式。
3、复合(Complex)模式小结
*MVC是复合模式,结合了观察者模式、策略模式和组合模式。
*模型使用观察者模式,以便观察者更新,同时保持两者之间的解耦。
*控制器是视图的策略,视图可以使用不同的控制器实现,得到不同的行为。
*视图使用组合模式实现用户界面,用户界面通常组合了嵌套的组件,像面板、框架和按钮。
*这些模式写手合作,把MVC的三层解耦,这样可以保持设计干净又有弹性。
*在MVC模式中,适配器用来将新的模型适配成已有的模型和控制器。
*Model 2是MVC在Web上的应用。
*在Model 2,控制器实现成Servlet,而JSP/HTML实现视图。
4、MVC模式实例
*模式通常被一起使用,并被组合在同一个设计解决方案中。
*复合模式在一个解决方案中结合两个或多个模式,以解决一般或重复发生的问题。
引用
Brain Power解答:
---------------------------------------------
适配器(Adapter)模式。
---------------------------------------------
呱呱叫解答:
---------------------------------------------
装饰者(Decorator)模式。
---------------------------------------------
---------------------------------------------
适配器(Adapter)模式。
---------------------------------------------
呱呱叫解答:
---------------------------------------------
装饰者(Decorator)模式。
---------------------------------------------
Sharpen your pencil解答:
--------------------------------------------- public abstract class AbstractGooseFactory{ public abstract Quackable createGoose(); } public class GooseFactory extends AbstractGooseFactory{ public Quackable createGoose(){ return new GooseAdapter(new Goose()); } } ---------------------------------------------
Sharpen your pencil解答:
--------------------------------------------- public class QuackCounter implements Quackable,Observable{ Quackable duck; static int numberOfQuacks; Observable observable; public QuackCounter(Quackable duck){ this.duck=duck; observable=new Observable(this); } public void quack(){ duck.quack(); numberOfQuacks++; } public static int getQuacks(){ return numberOfQuacks; } public void registerObserver(Observer observer){ observable.registerObserver(observer); } public void notifyObservers(){ observable.notifyObservers(); } } ---------------------------------------------
Sharpen your public解答:
--------------------------------------------- public class Flock implemtns Quackable,observable{ ArrayList quackers=new ArrayList(); Observable observable; public Flock(){ observable=new Observable(this); } public void add(Quackable quacker){ quackers.add(quacker); } public void quack(){ Iterator it=quackers.iterator(); While(it.hasNext()){ Quackable quacker=(Quackable)it.next(); quacker.quack(); } } public void registerObserver(Observer observer){ Iterator it=quackers.iterator(); While(it.hasNext()){ Quackable quacker=(Quackable)it.next(); quacker.registerObserver(observer); } } public void notifyObservers(){ } } ---------------------------------------------
*使用组合(Compose)模式时,需要在安全性和透明性之间折中选择。
2、MVC模式部分(模型Model-视图View-控制器Controller)
*视图(View):用来呈现模型。视图通常直接从模型中取得它需要显示的数据和状态。
*控制器(Controller):取得用户的输入并解读其对模型的含义。
*模型(Model):模型持有所有的数据、状态和程序逻辑。模型没有注意到视图和控制器,虽然它提供了操纵和检索状态的接口,并发送状态改变通知给观察者。
*不把控制器的代码(解读视图的输入并操纵模型)放到模型中的原因有两个:
引用
一、会让模型的代码更复杂。模型将具有两个责任,不但要管理用户界面,还要处理如何控制模型的逻辑。
二、会造成模型和视图之间的紧耦合,降低了可复用性。通过模型和视图之间的解耦,使设计更有弹性和容易扩展,能容纳改变。
二、会造成模型和视图之间的紧耦合,降低了可复用性。通过模型和视图之间的解耦,使设计更有弹性和容易扩展,能容纳改变。
*MVC和JSP Model 2都属于复合模式。
3、复合(Complex)模式小结
*MVC是复合模式,结合了观察者模式、策略模式和组合模式。
*模型使用观察者模式,以便观察者更新,同时保持两者之间的解耦。
*控制器是视图的策略,视图可以使用不同的控制器实现,得到不同的行为。
*视图使用组合模式实现用户界面,用户界面通常组合了嵌套的组件,像面板、框架和按钮。
*这些模式写手合作,把MVC的三层解耦,这样可以保持设计干净又有弹性。
*在MVC模式中,适配器用来将新的模型适配成已有的模型和控制器。
*Model 2是MVC在Web上的应用。
*在Model 2,控制器实现成Servlet,而JSP/HTML实现视图。
4、MVC模式实例
/** * 观察目标接口 * * @author zangweiren 2010-4-12 * */ public interface Observable { void notifyObservers(); void registerObserver(Observer observer); } /** * 模型接口 * * @author zangweiren 2010-4-12 * */ public interface Ball extends Observable { int getSpeed(); void move(); void slowDown(); void speedUp(); void stop(); } /** * 模型实现类 * * @author zangweiren 2010-4-12 * */ public class BallModel implements Ball { private List<Observer> observers = new ArrayList<Observer>(); private int speed = 0; @Override public int getSpeed() { return speed; } @Override public void move() { speed = 10; this.notifyObservers(); } @Override public void notifyObservers() { Iterator<Observer> it = observers.iterator(); while (it.hasNext()) { Observer observer = it.next(); observer.speedChanged(); } } @Override public void registerObserver(Observer observer) { observers.add(observer); } @Override public void slowDown() { if (speed > 0) { speed -= 10; this.notifyObservers(); } } @Override public void speedUp() { speed += 10; this.notifyObservers(); } @Override public void stop() { speed = 0; this.notifyObservers(); } } /** * 观察者接口 * * @author zangweiren 2010-4-12 * */ public interface Observer { void speedChanged(); } /** * 视图 * * @author zangweiren 2010-4-12 * */ public class BallView implements Observer { private BallController controller; private Ball ballModel; private JButton move; private JButton stop; private JButton speedUp; private JButton slowDown; private JFrame main = new JFrame(); private JPanel ballPanel; private JButton ball; private JLabel speed; private boolean moving = false; public BallView(BallController controller, Ball ballModel) { this.controller = controller; this.ballModel = ballModel; this.ballModel.registerObserver(this); initView(); showBall(); } private void drawBall(int x, int y) { ball.setLocation(x, y); } private void initView() { main.setTitle("MVC Pattern"); main.setSize(300, 200); main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); main.setResizable(false); move = new JButton("Move"); stop = new JButton("Stop"); speedUp = new JButton(">>"); slowDown = new JButton("<<"); ballPanel = new JPanel(); ball = new JButton(); ball.setBackground(Color.RED); ball.setEnabled(false); ball.setSize(20, 20); ball.setLocation(0, 50); JPanel p = new JPanel(); p.add(move); p.add(slowDown); p.add(speedUp); p.add(stop); stop.setEnabled(false); speed = new JLabel("Current speed:" + ballModel.getSpeed()); JPanel speedPanel = new JPanel(); speedPanel.add(speed); main.getContentPane().add(speedPanel, BorderLayout.NORTH); ballPanel.add(ball); main.getContentPane().add(ballPanel); ballPanel.setLayout(null); main.getContentPane().add(p, BorderLayout.SOUTH); main.setVisible(true); move.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { controller.move(); } }); stop.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { controller.stop(); } }); speedUp.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { controller.speedUp(); } }); slowDown.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { controller.slowDown(); } }); } public void setMoveButtonEnable(boolean b) { move.setEnabled(b); } public void setMoving(boolean b) { this.moving = b; } public void setStopButtonEnable(boolean b) { stop.setEnabled(b); } public void showBall() { new Thread() { @Override public void run() { int x = 0; int y = 50; while (true) { if (!moving) { continue; } drawBall(x, y); try { if (ballModel.getSpeed() != 0) { Thread.sleep(1000 / ballModel.getSpeed()); x++; if (x > 290) { x = 0; } } else { Thread.sleep(1000); } } catch (InterruptedException e) { e.printStackTrace(); } } } }.start(); } @Override public void speedChanged() { speed.setText("Current speed:" + ballModel.getSpeed()); } } /** * 控制器 * * @author zangweiren 2010-4-12 * */ public class BallController { private Ball ballModel; private BallView view; public BallController(Ball ballModel) { this.ballModel = ballModel; this.view = new BallView(this, ballModel); } public void move() { ballModel.move(); view.setMoveButtonEnable(false); view.setStopButtonEnable(true); view.setMoving(true); System.out.println("Ball is moving..."); } public void slowDown() { ballModel.slowDown(); System.out.println("Slow down:" + ballModel.getSpeed()); } public void speedUp() { ballModel.speedUp(); System.out.println("Speed up:" + ballModel.getSpeed()); } public void stop() { ballModel.stop(); view.setMoveButtonEnable(true); view.setStopButtonEnable(false); view.setMoving(false); System.out.println("Ball is stopped."); } } /** * MVC测试类 * * @author zangweiren 2010-4-12 * */ public class TestBallView { public static void main(String[] args) { Ball ballModel = new BallModel(); new BallController(ballModel); } }
发表评论
-
Java6.0新特性之StAX--全面解析Java XML分析技术
2010-04-19 12:57 23811作者:臧圩人(zangweiren) 网址:http://za ... -
《Head First设计模式》阅读笔记.全书总结
2010-04-14 15:13 55141、模式(Pattern)定义 ... -
《Head First设计模式》阅读笔记.其他设计模式
2010-04-14 13:33 21971、附录A部分-剩下的模 ... -
《Head First设计模式》阅读笔记.第十三章
2010-04-13 14:40 19551、与设计模式相处 模式:是在某种情境下(Context), ... -
《Head First设计模式》阅读笔记.第十一章
2010-04-08 17:57 23741、代理(Proxy)模式部分 实现RMI(远程方法调用)的 ... -
《Head First设计模式》阅读笔记.第十章
2010-04-02 17:22 21941.状态(State)模式部分 *设计谜题 -------- ... -
《Head First设计模式》阅读笔记.第八章
2010-03-30 14:28 23511.模板方法(Template Metho ... -
《Head First设计模式》阅读笔记.第九章
2010-01-27 10:33 25441.迭代器(Iterator)模式 ... -
《Head First设计模式》阅读笔记.第七章-外观模式实例补充
2010-01-21 17:08 2054// 电源 public class Power { p ... -
《Head First设计模式》阅读笔记.第七章
2010-01-21 11:02 22281.适配器(Adapter)模式部分 *OO适配器和真实世界 ... -
《Head First设计模式》阅读笔记.第六章
2010-01-19 14:53 19281.命令(Command)模式部分 引用----连连看解答- ... -
《Head First设计模式》阅读笔记.第五章
2010-01-15 16:48 20371.单件(单态,Singleton)模式部分 *有些对象我们 ... -
《Head First设计模式》阅读笔记.第四章
2010-01-14 17:06 24891.简单工厂(Simple Factory ... -
《Head First设计模式》阅读笔记.第三章
2010-01-13 12:07 21161.装饰者(Decorator)模式部分 *利用组合(com ... -
《Head First设计模式》阅读笔记.第二章
2010-01-12 15:04 24481.观察者(Observer)模式部分 *观察者模式:定义了 ... -
《Head First设计模式》阅读笔记.第一章
2010-01-12 10:00 37971.策略模式部分 *面向对象(OO)的四个基本概念是:抽象、 ...
相关推荐
1.1 《Head First设计模式》阅读笔记.第一章 1.2 《Head First设计模式》阅读笔记.第二章 1.3 《Head First设计模式》阅读笔记.第三章 1.4 《Head First设计模式》阅读笔记.第四章 1.5 《Head First设计模式》...
Head.First 设计模式学习笔记.pdf Head.First 设计模式学习笔记.pdf
笔记_HeadFirst设计模式
HeadFirst设计模式学习笔记比较全面详细地讲解了13个设计模式,有利于大家更好的学习HeadFirst设计模式,希望亲们会喜欢~~~
Head First 设计模式学习笔记。更多内容请参见文章内容。
HeadFirst 设计模式学习笔记3--装饰模式 Demo http://blog.csdn.net/laszloyu/archive/2010/05/12/5582561.aspx
HeadFirst设计模式 读书 笔记
HeadFirst 设计模式学习笔记2--观察者模式 demo http://blog.csdn.net/laszloyu/archive/2010/05/12/5581769.aspx
http://blog.csdn.net/laszloyu/archive/2010/05/11/5579765.aspx 示例代码
Head First设计模式读书笔记-DesignPatterns
NULL 博文链接:https://zhangfy068.iteye.com/blog/1706132
著名的《Head First Design Pattern》学习笔记,摘要这本书中的设计思路。由于书本过长,整理出笔记帮助回想起设计模式。文件是docx格式,只能由OFFICE Word 2007之后的版本打开,内附Visio类图文件。本文由个人整理...
NULL 博文链接:https://chxiaowu.iteye.com/blog/1276845
NULL 博文链接:https://never-say-never.iteye.com/blog/851923
趣味的移动开发讲解讲解,类似个人笔记,非常容易懂的,有好多勾画图
headfirst 设计模式读书笔记 书很好,浅显易懂,例子生动,适合初学者
设计模式Head First学习笔记,以及使用java编写的设计模式源码,Java原生sdk实现23种设计模式
java原始中的设计模式 Gof设计模式 一个Android应用程序,该应用程序演示了以下来源的GoF设计模式的源代码: E.Freeman,E.Freeman,K.Sierra,B.Bates的书:copyright:O'Reilly 2004 布莱恩·汉森(Bryan Hansen),...