设计模式
不变不中
多想、多做、多总结,别怕吃亏。
展开
-
单例模式(Singleton)
保证一个类仅有一个实例,并提供一个访问它的全局访问点,避免一个全局使用的类频繁的创建和销毁,节省系统资源,提高程序效率。怎么创建唯一的实例?Java是这么创建实例的 Person p = new Person();但是这么创建会创建多个实例,所以我们必须把构造器设为私有,这样其他类就不能使用new来实例化一个类。public class Singleton { //定义一个属性,用来保存Sin转载 2016-08-29 20:13:47 · 599 阅读 · 0 评论 -
策略模式(Strategy)
策略模式(Strategy)定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。类图: - 1.Strategy:策略接口,用来约束一系列具体的策略算法。Context使用这个接口来调用具体的策略,实现定义的策略。2.ConcreteStrategy:具体的策略实现,也就是具体的算法实现。3.Context:上下文,负责与具体的策略交互,通转载 2016-08-30 23:04:17 · 392 阅读 · 0 评论 -
观察者模式(Observer)
观察者模式(Observer)对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。类图:1.抽象主题(Subject)角色:把所有对观察者对象的引用保存在一个集合中,每个抽象主题角色都可以有任意数量的观察者。抽象主题提供一个接口,可以增加和删除观察者角色。一般用一个抽象类和接口来实现。2.抽象观察者(Observer)角色:为所有具体的观察者定义一转载 2016-08-30 22:43:12 · 381 阅读 · 0 评论 -
装饰器模式(Decorator)
装饰器模式(Decorator)对客户透明的方式动态地给一个对象附加上更多的责任,同时又不改变其结构。装饰模式可以在不使用创造更多子类的情况下,将对象的功能加以扩展。类图:1.抽象构件(Component)角色:给出一个抽象接口,以规范准备接收附加责任的对象。2.具体构件(ConcreteComponent)角色:定义一个将要接收附加责任的类。3.装饰(Decorator)角色:持有一个构件(转载 2016-08-30 14:35:23 · 489 阅读 · 0 评论 -
外观模式(Facade)
外观模式(Facade)为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。降低访问复杂系统的内部子系统时的复杂度。类图:在客户端和复杂系统之间再加一层,将调用顺序、依赖关系等处理好。举个例子:我们经常用的电脑,开机其实是个非常复杂的过程,而我们只需要按开机按钮就可以了。例子:转载 2016-08-30 13:40:59 · 462 阅读 · 0 评论 -
适配器模式(Adapter Class/Object)
适配器模式(Adapter Class/Object)是指将一个接口转换成客户端希望的另外一个接口,该模式使得原本不兼容的类可以一起工作。举个例子:macbook pro有一个HDMI接口,一条HDMI接口的数据线,现在要外接显示器,而显示器只有VGI接口,我们需要一个HDMI-VGI转换器,这个转换器其实起到的作用就是适配器,让两个不兼容的接口可以一起工作。类图:适配器有4种角色:1.目标抽象角转载 2016-08-30 09:01:56 · 1099 阅读 · 0 评论 -
模板方法模式(Template Method)
模板方法模式(Template Method)定义一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重定义该算法中的某些特定步骤。类图:模板方法模式是编程中经常用到的模式,其非常简单,AbstractClass叫抽象模板,其方法分为3类:1.抽象方法:父类中只声明但不加以实现,而是定义好规范,然后由它的子类去实现。2.模版方法:由抽象类声明并加以实现。一般来说,模版转载 2016-08-30 08:45:23 · 633 阅读 · 0 评论 -
建造者模式(Builder)
建造者模式(Builder)将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。主要解决在软件系统中,有时候面临着”一个复杂对象”的创建工作,由于需求的变化,这个复杂对象的某些部分经常面临着剧烈的变化,一些基本部件不会变。所以需要将变与不变分离。与抽象工厂的区别:在建造者模式里,有个指导者(Director),由指导者来管理建造者,用户是与指导者联系的,指导者联系建造者最后得到产品转载 2016-08-30 08:30:03 · 407 阅读 · 0 评论 -
抽象工厂模式(Abstract Factory)
抽象工厂模式(Abstract Factory)为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。抽象工厂是工厂模式的升级版,他用来创建一组相关或者相互依赖的对象。来看下抽象工厂模式的类图:前面咱们说的工厂模式,类的创建依赖工厂类,程序需要扩展时,我们必须创建新的工厂类。工厂类是用来生产产品的,那我们也可以把“工厂类当成我们要生产的产品”,所以抽象工厂就是“工厂的工厂”,即生产工转载 2016-08-29 21:53:12 · 474 阅读 · 0 评论 -
设计模式的六大原则
1 开闭原则一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。在软件的生命周期内,因变化、升级和维护对原有代码进行修改,可能会引入错误。所以当软件需要变化时,通过扩展软件实体的行为来实现变化,而不是修改原有代码。2 里氏代换原则任何基类可以出现的地方,子类一定可以出现。里氏代换原则是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类转载 2016-08-29 20:32:48 · 418 阅读 · 0 评论 -
工厂方法模式(Factory Method)
工厂方法模式(Factory Method)定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。类图:1.很多工厂都有一些相同的行为,比如汽车工厂。我们需要抽象这些相同的行为成接口,每个工厂都实现这个接口。public interface IFactory { public void createProduct();}2.生产相同的产品每个工厂所使用的转载 2016-08-29 20:47:44 · 549 阅读 · 0 评论