常用设计模式(单例,代理,工厂,观察者)
Posted gmzqjn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常用设计模式(单例,代理,工厂,观察者)相关的知识,希望对你有一定的参考价值。
单例:线程池、任务管理器。
1.饿汉模式:类加载时就创建好单例对象,调用静态方法返回单例对象,不需要考虑多线程问题。
class Singleton{
private static singleInstance = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return singleInstance;
}
}
2.懒汉模式:在调用方法时再创建单例对象
class Singleton{
private static volatile Singleton singleInstance = null;
private Singleton(){}
public static synchronized getInstance(){
if(singleInstance==null){
singleInstance = new Singleton();
}
return singleInstance;
}
}
简单工厂模式:
public class LenovoComputer extends Computer{
@Override
public void start() {
System.out.println("联想电脑启动");
}
public class AsusComputer extends Computer {
@Override
public void start() {
System.out.println("华硕电脑启动");
}
}
public class HpComputer extends Computer{
@Override
public void start() {
System.out.println("惠普电脑启动");
}
}
public class ComputerFactory {
public static Computer createComputer(String type){
Computer mComputer=null;
switch (type) {
case "lenovo":
mComputer=new LenovoComputer();
break;
case "hp":
mComputer=new HpComputer();
break;
case "asus":
mComputer=new AsusComputer();
break;
}
return mComputer;
}
}
public class CreatComputer { public static void main(String[]args){ ComputerFactory.createComputer("hp").start(); } }
将我们要生产的产品共同继承或者实现一个特定的接口,然后调用工厂的静态方法并且传递参数,就会根据参数调用接口的不同的实例对象。
策略模式:
将完成一件事情的不同方法封装为类,然后根据实际情况选择不同的处理方法。http://c.biancheng.net/view/1378.html详情见这篇文章。
构成:
抽象策略:具体策略的公共接口,策略的公共代码写在这里,上下文环境类持有该接口引用,使用该引用调用不同的策略。
具体策略:完成一件事情的方法,继承抽象策略接口,实现策略方法。
上下文环境类:持有策略引用,客户端调用该类对象。
简单工厂和策略很像,不同在于,
通过向工厂传递参数,工厂返回对象。
策略是,传递对象,然后就可以产生相应的行为。
策略模式的扩展:
在一个使用策略模式的系统中,当存在的策略很多时,客户端管理所有策略算法将变得很复杂,如果在环境类中使用策略工厂模式来管理这些策略类将大大减少客户端的工作复杂度。
原理是,在上下文对象中持有一个map容器,key是不同策略的字符串,value是单例对象。根据客户端传进来的字符串,选择不同的实例对象。
观察者模式
http://c.biancheng.net/view/1390.html又叫订阅/发布模式
构成:
抽象观察者(接口)
具体观察者
抽象目标(注意是抽象类!)(相当于中介,真正的事件发生时,通知中介,中介再调用notify方法通知各个观察者)
具体目标
抽象目标之所以是抽象类,是因为里边要有具体的方法。
该模式最重要的也是抽象目标里的方法,图中这几个方法
都是具体实现的,而在具体目标中,
代理模式:
优点:可以在不修改方法的基础上对方法进行增强。
静态代理:代理类和具体类一起实现某个接口,所以代理类和具体类有同名方法,在代理类的同名方法中进行增强后,调用具体类中的方法(代理类中持有一个接口的引用)。
以上是关于常用设计模式(单例,代理,工厂,观察者)的主要内容,如果未能解决你的问题,请参考以下文章