设计模式—详解篇—创建型模式

1.  java程序中,对象可以被显式地或者隐式地创建?

       1.1显式的创建对象的方式

        A.new语句创建对象

        B.运用反射手段,调用java.lang.Class 或者 java.lang.reflect.Constructor 类的newInstance()

           例方法

        C.调用对象的clone()方法

        D.运用序列化手段,调用java.io.ObjectInputStream 对象的 readObject()方法.

      1.2隐式建对象的方式

        A. String a= "hello";这种属于String类型直接对应一个String对象,引用一个String对象。若此时运行String b="hello";ab是同一个对象。

        B. String+的使用。

        C. JVM加载一个类的时候,会隐含创建描述这个类的Class实例。

2.显示创建中各种方式的用途及优缺点?

   2.1new语句创建对象:

如果构造方法中有参数,当使用这种方式写程序时不利于扩展参数,扩展时会导致多出修改

   2.2运用反射手段

此方法可以帮助减少if-else语句

   2.3 clone方法

      对应了创建型模式的prototype模式,用于克隆一个具有同样属性的对象出来

      注意深度clone的实现

   2.4运用序列化手段

      还没使用过

3.  根据对象的复杂性使用不同的设计模式渐进的实现对象的构造?

3.1Singleton模式

    保证一个类仅有一个实例,应提供一个访问它的全局访问点

有些对象是需要计划生育的,如太阳。

Singleton的实现方式有饿汉式和懒汉式两种

饿汉式代码:

           public class Sun{

         private static final Sun uniqueInstance=new Sun();

         private Sun(){}

         public static Sun getInstance(){

            return  uniqueInstance;

         }

}

懒汉式代码:

public class Sun{

  private static Sun  uniqueInstance;

  private Sun(){}

  public static Sun getInstance(){

    if( uniqueInstance==null){

      synchronized(Sun.class){

        if(uniqueInstance==null){

           uniqueInstance=new Sun();

        }

      }

    }

    return  uniqueInstance;

  }

}

3.2 prototype原型模式(clone)

    用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

   有时创建的对象要求和已有对象完全一样,如个人简历

   此模式分为浅复制和深复制

   浅复制:复制出的对象的所有原型变量都与原来的对象具有相同的值,而所有的其他对象引用的变量都仍然指向原来的对象。

              public class Resume implements Cloneable {

          private String name;

          private int age;

 

           @Override

           public Resume clone() throws CloneNotSupportedException {

             Resume message = (Resume) super.clone();

             return message;

           }

}

          深复制:将对象中的引用型变量也复制出来

                  public class Resume implements Cloneable {

            private User user;

            @Override

            public Resume clone() throws CloneNotSupportedException {

               Resume message = (Resume) super.clone();

               if (this.user != null) {

                  message.user = this.user.clone();

               }

               return message;

              }

}

   3.3 Factory工厂模式

          此模式又分为三个子模式:简单工厂模式、工厂方法模式、抽象工厂模式。他们因要创造的对象的复杂程度不同而渐进变化。

          简单工厂模式:这好比个人的作坊,生产的产品比较简单

          生产苹果的例子

                  public class AppleFactory {

             public static Apple getApple() {

              Apple apple = new Apple();

              return apple;

            }

 

             private AppleFactory() {

             }

}

工厂方法:此时生产的为统一接口且不同实现的产品。工厂有个接口,生产的产品也有个接口,每种具体的产品对应一个具体工厂

抽象工厂:此时生产的产品为相互依赖的、有一定关联的多种产品。工厂有个接口,每个工厂都对应生产出这些相互依赖的产品。

       3.4 Builder建造者模式

               此模式创造的是一个复杂的对象,达到对象的构建与它的表示相分离,使得同样的

          构建过程可以创建出不同的表示。

               看图说话:

              

 

             模式中有个指挥员,指挥具体的建造者建超产品,最有建造者通过getResult() 获取产品

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值