设计模式相关

来源:互联网 发布:i3-2350m编程好用吗 编辑:程序博客网 时间:2024/05/22 06:23

   zuoxiaolong8810(左潇龙) http://blog.csdn.net/zuoxiaolong8810/      设计模式学习记录

程序设计六大原则

 单一职责原则:描述的意思是每个类都只负责单一的功能,切不可太多,并且一个类应当尽量的把一个功能做到极致。

里氏替换原则:这个原则表达的意思是一个子类应该可以替换掉父类并且可以正常工作。

接口隔离原则:也称接口最小化原则,强调的是一个接口拥有的行为应该尽可能的小。

  依赖倒置原则:这个原则描述的是高层模块不该依赖于低层模块,二者都应该依赖于抽象,抽象不应该依赖于细节,细节应该依赖于抽象。

    迪米特原则:也称最小知道原则,即一个类应该尽量不要知道其他类太多的东西,不要和陌生的类有太多接触。

开闭原则:对修改关闭,对扩展开放。

单例模式:

懒汉模式:

public class SlackerSingleton {private static SlackerSingleton slackerSingleton;private SlackerSingleton(){};public static SlackerSingleton getSingleton(){if(slackerSingleton == null){synchronized (SlackerSingleton.class) {if(slackerSingleton ==null){slackerSingleton = new SlackerSingleton();}}}return slackerSingleton;}}

饿汉模式:

public class HungrySingleton {private HungrySingleton(){};private static class Instance{static HungrySingleton singleton = new HungrySingleton();};public static HungrySingleton getInstance(){return Instance.singleton;}}

代理模式:分为两种,一种是静态代理,一种是动态代理。两种代理从虚拟机加载类的角度来讲,本质上都是一样的,都是在原有类的行为基础上,加入一些多出的行为,甚至完全替换原有的行为。

静态代理:静态代理采用的方式就是我们手动的将这些行为换进去,然后让编译器帮我们编译,同时也就将字节码在原有类的基础上加入一些其他的东西或者替换原有的东西,产生一个新的与原有类接口相同却行为不同的类型。

从静态代理的使用上来看,我们一般是这么做的。

                1,代理类一般要持有一个被代理的对象的引用。

                2,对于我们不关心的方法,全部委托给被代理的对象处理。

                3,自己处理我们关心的方法。

这种代理是死的,不会在运行时动态创建,因为我们相当于在编译期,也就是你按下CTRL+S的那一刻,就给被代理的对象生成了一个不可动态改变的代理类。

               静态代理对于这种,被代理的对象很固定,我们只需要去代理一个类或者若干固定的类,数量不是太多的时候,可以使用,而且其实效果比动态代理更好,因为动态代理就是在运行期间动态生成代理类,所以需要消耗的时间会更久一点。

动态代理:动态代理是JDK自带的功能,它需要你去实现一个InvocationHandler接口,并且调用Proxy的静态方法去产生代理类。

 动态代理有一个强制性要求,就是被代理的类必须实现了某一个接口,或者本身就是接口。


简单工厂模式:从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。

public class SimpleFactory {public static Iproduct createProduct(String productName){if("A".equals(productName)){ProductA produtcA =new ProductA();return produtcA;}else if("B".equals(productName)){ProductB productB =new ProductB();return productB;}return null;}}public interface Iproduct {public void method();}public class ProductA implements Iproduct{@Overridepublic void method() {System.out.println("A");}}public class ProductB implements Iproduct{@Overridepublic void method() {System.out.println("B");}}public class Test {public static void main(String[] args) {Iproduct pA = SimpleFactory.createProduct("A");pA.method();Iproduct pB = SimpleFactory.createProduct("B");pB.method();}}


工厂方法模式:定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。

抽象工厂模式:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。


1,首先从简单工厂进化到工厂方法,是因为工厂方法弥补了简单工厂对修改开放的弊端,即简单工厂违背了开闭原则。

2,从工厂方法进化到抽象工厂,是因为抽象工厂弥补了工厂方法只能创造一个系列的产品的弊端。


观察者模式:一个类管理着所有依赖于它的观察者类,并且它状态变化时会主动给这些依赖它的类发出通知。



原创粉丝点击