常用的几种设计模式

设计模式:

1.  简单工厂模式:又叫做静态工厂方法模式。是一个工厂类根据传入参量决定创建出

种产品类实例。一般涉及到三种角色:
1)
工厂类角色:这是本模式核心含有一定商业逻辑和判断逻辑。在java中它往往由一个具体类实现
2)
抽象产品角色:它一般是具体产品继承父类或者实现接口。在java中由接口或者抽象类来实现

3)
具体产品角色:工厂类所创建对象就是此角色实例。在java由一个具体类实现

 

2.  工厂方法模式又称多态性工厂方法模式。它去掉了简单工厂模式工厂方法静态属性使得它可以被子类继承,由其子类决定要实例化的类是哪一个。涉及四种角色:
1)
抽象工厂角色:这是工厂方法模式核心,它与应用程序无关。是具体工厂角色必须实现接口或者必须继承父类。在java中它抽象类或者接口来实现。
2)
具体工厂角色:含有和具体业务逻辑有关代码由应用程序调用以创建对应具体产品对象

3)
抽象产品角色:它是具体产品继承父类或者是实现接口。在java中一般有抽象类或者接口来实现

4)
具体产品角色:具体工厂角色所创建对象就是此角色实例。在java中由具体类来实现。

 

3.  抽象工厂模式:又称工具箱模式。提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。涉及四种角色(同工厂方法角色一样):‘

工厂方法模式:

一个抽象产品类,可以派生出多个具体产品类。

一个抽象工厂类,可以派生出多个具体工厂类。

每个具体工厂类只能创建一个具体产品类的实例。

    抽象工厂模式:

多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。

一个抽象工厂类,可以派生出多个具体工厂类。

每个具体工厂类可以创建多个具体产品类的实例。

       区别:

工厂方法模式只有一个抽象产品类,而抽象方法模式有多个。

工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。

 

4.  单例模式:保证一个类中仅有一个实例,并提供一个访问它的全局访问点。

public class Singleton {

//在自己内部定义自己一个实例,注意这是private 只供内部调用

private static Singleton instance = new Singleton() ;

//如上面所述,将构造函数设置为私有

private Singleton(){}

//静态工厂方法,提供了一个供外部访问得到对象的静态方法

public static Singleton getInstance() {

return instance;

}

}

 

下面这种方式被称为懒汉式:P

public class Singleton {

//和上面有什么不同?

private static Singleton instance = null;

//设置为私有的构造函数

private Singleton(){}

//静态工厂方法

public static synchronized Singleton getInstance() {

//这个方法比上面有所改进

if (instance==null)

instance=new Singleton();

return instance;

}

}

 

5.  代理模式:为其他对象提供一种代理以控制对这个对象的访问。涉及三种角色:

1)  抽象主题角色:声明了真实主题和代理主题的共同接口。

2)  代理主题角色:内部包含对真实主题的引用,并且提供和真实主题角色相同的接口。

3)  真实主题角色:定义真实的对象。

 

6.  观察者(Observer)模式:定义对象之间的一种一对多依赖关系,当一个对象改变状态时,所有依赖它的对象都会收到通知并自动更新。

例如:报纸订阅服务,出版社和订阅者可以比拟这一切(报纸更新会通知订阅者)。

涉及四种角色:

1)    抽象目标角色(Subject):目标角色知道它的观察者,可以有任意多个观察者观察同一

个目标。并且提供注册和删除观察者对象的接口。目标角色往往由抽象类或者接口来实现。

2) 抽象观察者角色(Observer):为那些在目标发生改变时需要获得通知的对象定义一个

更新接口。抽象观察者角色主要由抽象类或者接口来实现。

3) 具体目标角色(Concrete Subject):将有关状态存入各个Concrete Observer 对象。当

它的状态发生改变时, 向它的各个观察者发出通知。

4) 具体观察者角色(Concrete Observer):存储有关状态,这些状态应与目标的状态保持

一致。实现Observer 的更新接口以使自身状态与目标的状态保持一致。在本角色内也可以维护一个指向Concrete Subject 对象的引用。

      

7.  策略模式:属于对象行为型设计模式,定义算法族,分别封装成拥有共同接口的单独的类,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

涉及三种角色:

1) 算法使用环境(Context)角色:算法被引用到这里和一些其它的与环境有关的操作一起

来完成任务。

2) 抽象策略(Strategy)角色:规定了所有具体策略角色所需的接口。在java 它通常由接口

或者抽象类来实现。

3) 具体策略(Concrete Strategy)角色:实现了抽象策略角色定义的接口。

      

8.  装饰者模式:动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。涉及四种角色:

1) 抽象构件角色(Component):定义一个抽象接口,以规范准备接收附加责任的对象。

2) 具体构件角色(Concrete Component):这是被装饰者,定义一个将要被装饰增加功能的类。

3) 装饰角色(Decorator):持有一个构件对象的实例,并定义了抽象构件定义的接口。

4) 具体装饰角色(Concrete Decorator):负责给构件添加增加的功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值