您的位置:首页 > 其它

设计模式 篇 单子模式 门面模式 适配器 工厂模式 观察者模式 命令者模式 装饰者模式 代理模式 简单讲解

2016-11-17 18:57 453 查看
                                              设计模式

1.  单子模式 (4种):  分类:   简单单子模式:            设构造器为私有 and  提供静态的返回对象的公有方法。

                                                         同步synchronized单子模式: 将方法或者对象(Singleton.class)进行同步处理。

                                                         内部类单子模式:               声明私有静内部类,在内部类里静态的声明对象属性。and 提供一个共有方法返回内部类属性(对象)。  

                                                         volatile优化单子模式:      private volatile static Singleton4 s=null; // 一,防止jvm的简化,为每个都分配空间。 注意加上 volatile 进行优化。

2.  门面模式(方法门面):   提供一个方法类 ,方法里面合成了各个不同对象的执行。起到了调用一个方法,就可以实例化多个方法。

3.  适配器模式(继承实现):分类:类适配器:     继承待适配的类  实现可提供的接口类 

                                                                 对象适配器: 不用继承待适配的类,直接用构造器注入的方式进行传递。实现提供的接口类。

                                                                接口适配器:适应场景(当不想实现所有接口中的方法的时候)  。实现: 利用抽象类实现接口。在用不同的类去继承抽象类,实现想要单独实现的方法

4.  工厂模式(实例化转移到一个类): 分类:简单工厂(参数):根据方法传递的参数进行返回不同的    实例化对象。

                                                                                  工厂方法模式(方法):根据不同的方法返回不同的实例化的对象。  

                                                                                  抽象工厂:声明一个抽象的工厂接口,针对不同的工厂进行不同的实现。调用的时候根据不同的工厂进行不同产品的生产。

                                                                                  静态工厂:将方法工厂中的方法声明成静态的。调用的时候直接用类调用,不需要实例化。

                      

5.  观察者模式(集合):    核心类 :   管理观察者类 (增加,删除,更新)。

                                                                     主题类(观察者进行观察的类)[一般就继承上面的类,这样好分组]:实现主题的get 和 set

                                                                     观察者类(与主题类进行关联,查看消息)。

6.  命令模式:(实现两个类之间的完全解耦)  核心类: 发送命令类(调用命令方法,内聚命令类)。

                                                                                                    中间命令接收类(调用具体执行命令方法,内聚执行类)。

                                                                                                    执行命令类(对应执行方法的声明)。

7.  装饰者模式:(实现同一接口):装饰类需要被动态传入被装饰类的对象,并且对其利用方法进行装饰。

                                                                注: 装饰模式跟代理模式的区别是,装饰模式必须要进行被装饰对象的传入,而代理模式是完全进行了代理。

8.  代理模式(实现同一接口):分类: 静态代理:在代理类中就直接进行实例化,进行被代理类的替换。

                                                                      动态代理(实现InvocationHandler接口):动态代理其实分为【JDK代理和cglib代理】相对来说cglib动态代理比较好。

                                                                                                                                                   实现机制:不直接实现同一接口,需要代理的类通过invoke方法里面的参数进行实现。

          代码:

public class Proxy1 implements InvocationHandler{

    Object obj;

    Proxy1( Object obj){

    this.obj=obj;

    }
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// TODO Auto-generated method 
System.out.println("调用了:"+method.getName());
System.out.println("我先执行!");
return method.invoke(obj, args);
}

}

public class Text {
public static void main(String[] args) {
IAniaml cat=new Cat();
Proxy1 p=new Proxy1(cat);
Object o=Proxy.newProxyInstance(cat.getClass().getClassLoader(), cat.getClass().getInterfaces(), p);
IAniaml o1=(IAniaml)o;
o1.speak();
o1.ok();
}

}

     

                                           
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐