设计模式
2018-03-07 本文已影响0人
zzz1985xx
创建模式
- 构造函数 creational pattern
一般采用构造函数创建类,除了和类名一致外的缺点外,还有同参数时无法创建的缺点,如下
class Point
{
// 直角坐标系
public Point(double x, double y){
}
// 极坐标系
public Point(double r, double theta){
}
}
- 静态工厂方法
静态工厂方法克服了构造函数的缺点,却导致无法继承的劣势
静态工厂还是单例模式的实现方法
class Point
{
private Point(double x,double y){}
// 直角坐标系
public static Point cartesian(double x, double y){
}
// 极坐标系
public static Point polar(double r, double theta){
}
}
-
类工厂模式
通过swith来更具传入的不同类型来返回需要的对象,不足之处是不符合开闭原则,导致每增加类型都要修改原有代码,添加case语句 -
多态工厂方法
使用多态的方式创建方法,满足了开闭原则,此处的抽象类也可以是接口,另外可以将其作为参数传入,实现依赖注入,充分实现解耦
abstract class WidgetFactory {
public abstract Component CreateFrame();
}
public class AwtWidgetFactory extends WidgetFactory {
public Container CreateFrame(){}
}
public class SwingWidgetFactory extends WidgetFactory {
public Container CreateFrame(){}
}
public class LoginForm {
private WidgetFactory factory;
public LoginForm(WidgetFactory factory){
this.factory = factory
}
public Container CreateLoginWindow(){
Container window = factory.CreateFrame()
}
}
- 建造者模式
当创建一个对象需要固定的许多步骤时,可采用此方法,将其封装在一个方法中
public class FormBuilder{
public Component BuildInput(){
step1();
step2();
.......
return component;
}
}
结构模式 structural pattern
抽象有多重要,层次就有多重要
底层模块经过合作产生高层模块,也可以高层模块经过细化产生底层模块,抽象层次向上递增,向下递减,不可随意越级调用,一旦随意调用,抽象层次被破坏,分层意义大打折扣,代码混乱不堪。
软件中很多问题都可以插入一个中间层来解决
抽象的目的是为了对抗变化,是寻求某种一致性的过程,放过来遵循一致性有利于抽象的形成
-
桥梁模式
通过中间桥梁,让两个类之间互不干扰,又能互相调用,重点是分解,让本来结合紧密的接口与实现分离开来 -
适配器模式
类似桥梁模式,重点是结合,让本来无关的类能合作共事,一般用于事后补救,让第三方或遗留代码能顺利调用。 -
装饰者模式
能动态的增加或取消对象的(非核心)职责 -
Facade模式
类似个大礼包,把所有东西都打包,外界代码全部调用此类,简化和统一外界对子系统对访问