MVC、单例、工厂

本文详细介绍了MVC模式的核心要点,包括模型的观察者模式、控制器作为视图的策略以及视图的组合模式。通过例子阐述了控制器在实际项目中的作用,解释了为何不应将控制逻辑放在视图中,以保持解耦和增强设计弹性。此外,还讨论了单例模式的实现方式和适用场景,以及工厂模式如何封装对象创建并区分了抽象工厂和工厂方法模式。

 MVC要点:

1、MVC是复合模式,结合了观察者模式、策略模式和组合模式。

2、模型使用观察者模式,以便观察者更新,同时保持两者之间解耦。

3、控制器是视图的策略,视图可以使用不同的控制器实现,得到不同的行为。

例如,如果聊天在机器人端,我们使用语音控制器,可以处理语音输入。

        在客户端,我们使用文字控制器,可以处理文字输入。

4、视图使用组合模式实现用户界面,用户界面通常组合了嵌套的组件,像面板、框架和按钮。

5、适配器模式用来将新的模型适配成已有的视图和控制器。


在我现在写的一个项目中:

View:包括机器人、网页(用于管理多媒体内容)、客户端。

Controller:WebSocket与View建立长连接,它会接受视图的请求handleTextMessage(),并转发给模型。处理结果是以JavaBean的形式打包。session.sendMessage(textMsg);

Model:处理 HttpServletRequest req.getAttribute("message")得到的消息,将其打包成JavaBean的形式进行处理,处理完后通知View更新视图。

问:控制器所做的事情就是把用户的输入从视图发送给模型,对不对?

答:不对,控制器做的事情不只有“发送给模型”,还会解读输入,并根据输入操作模型。并将视图传过来的信息JSON串打包成一个javaBean。传给Model。

问:为何不把这样的代码放到视图中?

答:如果只是一个人写代码当然可以这么做。但是这样

1.会让视图的代码变得复杂(如果逻辑复杂一点,前端小姐姐的工作量就太大了),因为这样一来视图就有两个责任,不但要管理用户界面,还要处理如何控制模型的逻辑。

2.将造成模型和视图之间紧耦合,如果你想复用此视图来处理其他模型,根本不可能。

控制器把控制逻辑从视图中分离,让模型和视图之间解耦。通过保持控制器和视图之间松耦合,设计就更有弹性且容易扩展,足以容纳以后的改变。

3.其实是上面两个的扩展,因为软件是多人协作开发的,前端,后台,算法,其实就是对应MVC各自的职能,所以不要一个人承担多个责任。第二,是复用的问题,例如,音乐节拍控制器的视图,也可以做心跳监视的视图,只需要使用一下,策略模式改变一下视图的控制器就OK了。

单例模式:确保一个类只有一个实例,并提供全局访问点。

1、如果将getInstance()的程序使用在频繁运行的地方,就不要将其变为同步的方法。如果你不care同步线程带来的性能损耗,就只要把getInstance变为同步的方法

2、如果应用程序总是创建并使用单件实例,或者在创建和运行时方面的负担不太繁重。使用急切创建此单件,我们依赖JVM在加载这个类时马上创建此唯一的单例

3、(性能优先)利用双重检查加锁,首先检查是否实例已经创建了,如果尚未创建,“才”进行同步。这样一来,只有第一次会同步,这正是我们想要的。


工厂模式:

所有的工厂都是用来封装对象的创建。工厂方法使用继承:把对象的创建委托给子类,子类实现工厂方法来创建对象。

抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。(披萨原料工厂)

工厂方法模式:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值