设计模式
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
创建型模式
工厂方法模式
简要的说,工厂方法模式是在创建实例的时候用的,定义一个用于创建对象的接口,让该接口的子类型来决定实例化哪一个类,从而使一个类的实例化延迟到其子类。即调用方法来实现实例化。
public class AB implements A {
public C get_C{
return new Csub()//返回c的一个子类
}
}
//客户端调用时,直接用一下内容
C = new AB().get_C()
工厂方法使得,当增加新的工厂类或修改现存的工厂类时,不会影响客户端的代码(OCP)
通过传参,也可以选择到底使那种实例化方式,对应现实中到底选择哪个产品
结构型模式
适配器模式
通过增加一个接口,将已存在的子类封装起来,从而隐藏具体子类。
适配器解决了接口不兼容的问题,但是信息不能有缺失,仅仅是形式上的转换
装饰器模式
装饰器(Decorator)模式的定义:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。
装饰器模式主要包含以下角色。
- 抽象构件(Component)角色:定义一个抽象接口以规范准备接收附加责任的对象。
- 具体构件(ConcreteComponent)角色:实现抽象构件,通过装饰角色为其添加一些职责。
- 抽象装饰(Decorator)角色:继承抽象构件,并包含具体构件的实例,可以通过其子类扩展具体构件的功能。
- 具体装饰(ConcreteDecorator)角色:实现抽象装饰的相关方法,并给具体构件对象添加附加的责任。
这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能
装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能
形式上来看,装饰器接收原来的class,并为其加上了新的功能
ShapeDecorator redCircle = new RedShapeDecorator(new Circle());
,例如这个,Circle是原class,而在RedShapeDecorator中,为其添加了新的功能,当然其类型也是和circle相容的,不影响circle原有的功能
装饰器模式使得在扩展类的功能时,免于了层层继承
行为类模式
策略模式
为不同的实现算法构造抽象接口,利用委派机制,运行时动态传入客户想要的算法实例
模板模式
公共的步骤在抽象类里面公共实现,差异化的步骤在各个子类中实现。模板方法定义了一个算法的步骤,并允许子类为一个或者多个步骤提供实现
迭代器模式
这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据。需要重写三个方法
hasnext,next,remove
访问者模式
本质上来说,是将数据和作用于数据上的某些特定的操作分离开,在实现上,在被访问的类里面加一个对外提供接待访问者的接口
public void accept(ComputerPartVisitor computerPartVisitor) { computerPartVisitor.visit(this);
通过accept引入一个别的类,那么就能通过使用 委托机制来使用别的类的功能了