`

3、创建型模式---单例模式&原型模式&建造者模式

 
阅读更多
1、单例模式【Singleton Pattern】
     几乎所有面向对象的程序中,总有一些类的对象需要是唯一的,例如,通过数据库句柄到数据库的连接是独占的。您希望在应用程序中共享数据库句柄,因为在保持连接打开或关闭时,它是一种开销。
    怎样确保一个特殊类的实例是独一无二的(它是这个类的唯一实例),并且这个实例易于被访问呢?
解决方案
1)全局变量:一个全局变量使得一个对象可以被访问,但它不能防止你实例化多个对象。因为你的任何代码都能修改全局变量,这将不可避免的引起更多调试的意外。换句话说,全局变量的状态总是会出现一些问题的。
2)类构造函数私有和类自身的静态方法:让类自身负责保存它的唯一实例(静态变量)。这个类可以保证没有其他实例可以被创建(通过截取创建新对象的请求) ,并且它可以提供一个访问该实例的方法(静态方法)。这就是Singleton模式。
public class Emperor {
private static Emperor emperor = null;
private Emperor(){
//封装构造方法
}
public static Emperor getInstance(){
if(emperor == null){
emperor = new Emperor();
}
return emperor;
}
}
在一个B/S 项目中, 假如现在有两个线程A 和线程B,线程A 执行到 this.singletonPattern = new SingletonPattern(),正在申请内存分配,可能需要0.001 微秒,就在这0.001 微秒之内,线程B 执行到if(this.singletonPattern == null),你说这个时候这个判断条件是true 还是false?是true,那
然后呢?线程B 也往下走,于是乎就在内存中就有两个SingletonPattern 的实例了,是不是出问题了。
简单的解决方法:
public class SingletonPattern {
private static final SingletonPattern singletonPattern= new SingletonPattern();
//限制不能由其他直接产生一个实例
private SingletonPattern(){
}
public synchronized static SingletonPattern getInstance(){
return singletonPattern;
}
}

2、原型模式
不通过 new 关键字来产生一个对象,而是通过对象拷贝来实现的模式就叫做原型模式.

应用:线程不安全;
对象拷贝时,类的构造函数是不会被执行的。
public class Prototype implements Cloneable {
    private String name;
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return this.name;
    }
    public Prototype(String name) {
        setName(name);
    }

    public Object clone(){
        try {
            return super.clone();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

public class Test {
    public static void main(String[] args) {
        Prototype pro = new Prototype("prototype");
        Prototype pro2 = (Prototype)pro.clone();
        System.out.println(pro.getName());
        System.out.println(pro2.getName());
    }
}
    原型模式适合在什么场景使用?一是类初始化需要消化非常多的资源,这个资源包括数据、硬件资源等;二是通过 new 产生一个对象需要非常繁琐的数据准备或访问权限,则可以使用原型模式;三是一个对象需要提供给其他对象访问,而且各个调用者可能都需要修改其值时,可以考虑使用原型模式拷贝多个对象供调用者使用。


3、建造者模式
  
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

Builder类:是为创建一个product对象的各个部件指定的抽象接口
ConcreteBuilder类:他是具体建造者,实现Builder接口,构造和装配各个部件
Director类:他是构建一个使用Builder接口的对象

public interface PersonBuilder {
    void buildHead();
    void buildBody();
    void buildFoot();
    Person buildPerson();
}

public class ManBuilder implements PersonBuilder {

    Person person;
    public ManBuilder() {
        person = new Man();
    }   
    public void buildBody() {
        person.setBody("建造男人的身体");
    }
    public void buildFoot() {
        person.setFoot("建造男人的脚");
    }
    public void buildHead() {
        person.setHead("建造男人的头");
    }
    public Person buildPerson() {
        return person;
    }
}

public class PersonDirector {
    public Person constructPerson(PersonBuilder pb) {
        pb.buildHead();
        pb.buildBody();
        pb.buildFoot();
        return pb.buildPerson();
    }
}

public static void main(String[] args) {
        PersonDirector pd = new PersonDirector();
        Person person = pd.constructPerson(new ManBuilder());
        System.out.println(person.getBody());
        System.out.println(person.getFoot());
        System.out.println(person.getHead());
    }



分享到:
评论

相关推荐

    单例模式源码java-DesignPattern:在个人自学阶段的23种设计模式代码的全部实现,全部使用Java编写,其中还包括各个设计模式在

    创建型模式 Singleton-------->单例模式 Factory-------->工厂方法模式、抽象工厂模式 Builder-------->建造者模式 Prototype-------->原型模式 1.2 结构型模式 Adapter-------->适配器模式 Bridge--...

    C#23种设计模式样例代码和UML图

    创建型模式(抽象工厂模式、工厂方法模式、单例模式、建造者模式、原型模式); 行为型模式(策略模式、 迭代器模式、原型模式、职责链模式、 模板方法、 命令模式、 解释器模式、 中介者模式、 访问者模式、 状态...

    设计模式-C++

    创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:...

    设计模式之创建型模式实验.docx

    在本实验中,我们将探讨五种常见的创建型设计模式:简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式和原型模式,并在Java环境中实现这些模式。 1. **简单工厂模式**: - **概念**:简单工厂模式通过一个...

    23种设计模式 -设计模式图解.7z

    创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:...

    设计模式-创建型模式、结构型模式和行为型模式

    4. **建造者模式**: - **简介**:将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。 - **应用场景**:当对象的创建步骤较为复杂,或者需要创建多个类似但又略有差异的对象时。 - **...

    C#面向对象设计模式纵横谈-创建型模式

    创建型设计模式是面向对象设计模式的一种类型,主要关注对象的创建过程,旨在提供灵活、可扩展和易于管理的对象实例化机制。本文将深入探讨C#中的创建型模式,帮助开发者更好地理解和应用这些模式。 1. **单例模式...

    23种设计模式,创建型模式共5种,结构型模式7种,行为型模式11种

    3. **建造者模式/生成器模式**:将复杂对象的构建与其表示分离,使得相同的构建过程可以创建不同的表示。 4. **原型模式**:通过复制已有对象来创建新对象,避免了直接构造新对象可能带来的复杂性。 5. **单例模式**...

    23种设计模式详解PDF

    、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式(7): 适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式(11): 策略模式、模板方法模式、观察者模式、...

    2型模式-MOOC课程内容.pdf

    创建型模式通常包括单例模式、工厂方法模式、抽象工厂模式、建造者模式和原型模式等。 原型模式(Prototype Pattern)是一种创建型设计模式,允许实例化一个类的过程中拷贝一个现有的实例作为新实例的模板,从而...

    设计模式-Java语言中的应用

    设计模式通常分为三类:创建型模式(如工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式),结构型模式(如适配器模式、装饰器模式、代理模式、桥接模式、组合模式、外观模式、享元模式)以及行为型模式(如...

    23种设计模式java源码

    创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:...

    设计模式1-创建型模式

    创建型模式包括Factory Method(工厂方法)、Abstract Factory(抽象工厂)、Builder(建造者)、Prototype(原型)、Singleton(单例)等。这些模式解决了对象的创建问题,提供了一种通用的解决方案。 结构型模式...

    java 23种设计模式.zip

    1.创建型模式:工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式。 2.结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。 4.行为型模式:模板方法模式、命令模式、...

    精品源码 C# 27种设计模式源代码

    1 建造者模式 1 装饰模式 2 单例模式 2 门面模式 2 模板方法模式 3 策略模式 3 工厂方法模式 3 组合模式 4 抽象工厂模式 4 代理模式 4 命令模式 5 迭代器模式 5 适配器模式 5 原型模式 6 简单工厂模式 6 解释器模式 ...

    23种设计模式项目实例

    创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:...

    常用设计模式特点比如工厂模式、单例模式等等

    - "对象创建"模式:如建造者模式、原型模式,它们专注于对象的创建过程,允许更复杂的实例化逻辑。 - "对象性能"模式:例如享元模式,通过共享对象来减少内存消耗,提高性能。 - "接口隔离"模式:提倡接口的职责应当...

    灸哥讲解创建型设计模式

    下面将逐一解析五个常见的创建型设计模式:单例模式、原型模式、工厂模式、抽象工厂模式以及建造者模式。 1. **单例模式** - 单例模式是一种限制类实例化次数为一次的设计模式,确保一个类只有一个实例,并提供...

    java常用23中设计模式

    创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:...

Global site tag (gtag.js) - Google Analytics