设计模式

来源:互联网 发布:九品网络电视 是什么 编辑:程序博客网 时间: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

用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它 们之间的交互。简单点来说,将原来两个直接引用或者依赖的对象拆开,在中间加入一个“中介”对象,使得两头的对象分别和“中介”对象引用或者依赖。



原创粉丝点击