设计模式
来源:互联网 发布:九品网络电视 是什么 编辑:程序博客网 时间:2024/05/18 21:10
依赖倒置原则:
所谓依赖倒置原则(Dependence Inversion Principle)就是要依赖于抽象,不要依赖于具体。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。
举个例子说明:在命令模式中体现的比较明显,这里的抽象是Command,细节实现是Tv,可以看就是命令对象持有细节对象,而不是细节持有命令对象
Command实现{private Tv myTv;}//而不是Tv{Commahd command实现1....n;}//如果是下面这种情况就是对细节编程而不是抽象编程了
下面给个例子,是模拟对电视机的操作有开机、关机、换台命令。代码如下//命令接收者public class Tv { public int currentChannel = 0; public void turnOn() { System.out.println("The televisino is on."); } public void turnOff() { System.out.println("The television is off."); } public void changeChannel(int channel) { this.currentChannel = channel; System.out.println("Now TV channel is " + channel); }}//执行命令的接口public interface Command { void execute();}//开机命令public class CommandOn implements Command { private Tv myTv; public CommandOn(Tv tv) { myTv = tv; } public void execute() { myTv.turnOn(); }}//关机命令public class CommandOff implements Command { private Tv myTv; public CommandOff(Tv tv) { myTv = tv; } public void execute() { myTv.turnOff(); }}//频道切换命令public class CommandChange implements Command { private Tv myTv; private int channel; public CommandChange(Tv tv, int channel) { myTv = tv; this.channel = channel; } public void execute() { myTv.changeChannel(channel); }}//可以看作是遥控器吧public class Control { private Command onCommand, offCommand, changeChannel; public Control(Command on, Command off, Command channel) { onCommand = on; offCommand = off; changeChannel = channel; } public void turnOn() { onCommand.execute(); } public void turnOff() { offCommand.execute(); } public void changeChannel() { changeChannel.execute(); }}//测试类public class Client { public static void main(String[] args) { // 命令接收者 Tv myTv = new Tv(); // 开机命令 CommandOn on = new CommandOn(myTv); // 关机命令 CommandOff off = new CommandOff(myTv); // 频道切换命令 CommandChange channel = new CommandChange(myTv, 2); // 命令控制对象 Control control = new Control(on, off, channel); // 开机 control.turnOn(); // 切换频道 control.changeChannel(); // 关机 control.turnOff(); }}执行结果为:The televisino is on.Now TV channel is 2The television is off.
1.单例模式(Singleton)
保证一个类有且仅有一个实例,并提供一个访问它的全局访问点
通常我们可以让一个全局变量使得一个对象被访问,但他不能防止你实例化多个对象,一个最好的办法就是让类自身保存他的实例,这个类可以保证没有其他实例可以被创建,并且他提供访问该实例的一个方法。
2.中介模式Mediator
用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它 们之间的交互。简单点来说,将原来两个直接引用或者依赖的对象拆开,在中间加入一个“中介”对象,使得两头的对象分别和“中介”对象引用或者依赖。