zoukankan      html  css  js  c++  java
  • 设计模式-创建型模式

    1,工厂模式 

      就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建
      创建一个Persion接口:
    public interface Persion {
        public void say();
    }

      创建实现Persion接口的2个类:

    public class Student implements Persion {
        @Override
        public void say() {
            System.out.println("student");
        }
    }
    public class Teacher implements Persion {
        @Override
        public void say() {
            System.out.println("Teacher");
        }
    }

      创建一个工厂类:

    public class PersionFactory {
        public static Persion createStudent(){
            return new Student();
        }
        public static Teacher createTeacher(){
            return new Teacher();
        }
    }    

      测试:

        

      结果:

        

    2,抽象工厂模式
        刚才工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,抽象工厂模式可以解决这个问题。创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。
        创建一个工厂的接口:
        
        创建实现Persion接口的2个类:
            同上。。。。。。
        创建2个工厂类:
        
      测试:
        

      结果:

        

    3,单例模式(Singleton)
      单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样的模式有几个好处:
        1、某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。
        2、省去了new操作符,降低了系统内存的使用频率,减轻GC压力。
        3、有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了。(比如一个军队出现了多个司令员同时指挥,肯定会乱成一团),所以只有使用单例模式,才能保证核心交易服务器独立控制整个流程。
      单例模式在多线程会有一个同步问题,不在这里讨论

    4,建造者模式(Builder)

      建造者模式是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性。看代码:
      模拟台式电脑组装:
        电脑实体类:
          

        抽象建造者:
          
        继承AbsPCBuilder具体建造者:
          
        具体使用者,负责电脑的组装:
          

        测试:
          
        结果:
          

    与工厂模式的区别:工厂模式关注的是创建单个产品,而建造者模式则关注创建复合对象,多个部分。
      使用建造者模式的好处:
        1,使用建造者模式可以使客户端不必知道产品内部组成的细节。
        2,具体的建造者类之间是相互独立的,对系统的扩展非常有利。
        3,由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响。

      使用建造者模式的场合:
        1,创建一些复杂的对象时,这些对象的内部组成构件间的建造顺序是稳定的,但是对象的内部组成构件面临着复杂的变化。
        2,要创建的复杂对象的算法,独立于该对象的组成部分,也独立于组成部分的装配方法时。

    4,原型模式(Prototype)
      将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象。
      一个原型类,只需要实现Cloneable接口,覆写clone方法,此处clone方法可以改成任意的名称,因为Cloneable接口是个空接口。
      创建一个原型类:
        

      浅复制和深复制: 
        浅复制:将一个对象复制后,基本数据类型的变量都会重新创建,而引用类型,指向的还是原对象所指向的。 
        深复制:将一个对象复制后,不论是基本数据类型还有引用类型,都是重新创建的。简单来说,就是深复制进行了完全彻底的复制,而浅复制不彻底。
        上面的复制就是浅复制,下面来看一个深复制的例子:
          

        要实现深复制,需要采用流的形式读入当前对象的二进制输入,再写出二进制数据对应的对象。

    参考质料:http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html

  • 相关阅读:
    数据库连接池
    数据库操作
    cookie/session
    楼梯问题
    Response/Request
    Web
    Exception
    jQuery效果与事件方法
    jQuery基础知识点
    布局的几种形式
  • 原文地址:https://www.cnblogs.com/my-haohao/p/5609346.html
Copyright © 2011-2022 走看看