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

系统 1263 0

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"; a b 是同一个对象。

        B. String + 的使用。

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

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

   2.1 new 语句创建对象:

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

   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()   获取产品

 

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


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论