JAVA语言中的设计模式实例讲解
小标 2019-01-18 来源 : 阅读 852 评论 0

摘要:本文主要向大家介绍了JAVA语言中的设计模式实例讲解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

本文主要向大家介绍了JAVA语言中的设计模式实例讲解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。


   

Java中的设计模式实例讲解



设计模式的定义


设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。


设计模式的分类


Java 中一般认为有 23 种设计模式,我们不需要所有的都会,但是其中常用的几种设计模式应该去掌握。下面列


出了所有的设计模式。需要掌握的设计模式我单独列出来了,当然能掌握的越多越好。


总体来说设计模式分为三大类:


创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。


结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。


行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模


式、状态模式、访问者模式、中介者模式、解释器模式。


1. 单例设计模式


单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。


这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。


注意:

1、单例类只能有一个实例。

2、单例类必须自己创建自己的唯一实例。

3、单例类必须给所有其他对象提供这一实例。


实现


我们将创建一个 SingleObject 类。SingleObject 类有它的私有构造函数和本身的一个静态实例。


步骤 1


创建一个 Singleton 类。


SingleObject.java

public class SingleObject {

 

   //创建 SingleObject 的一个对象

   private static SingleObject instance = new SingleObject();

 

   //让构造函数为 private,这样该类就不会被实例化

   private SingleObject(){}

 

   //获取唯一可用的对象

   public static SingleObject getInstance(){

      return instance;

   }

 

   public void showMessage(){

      System.out.println("Hello World!");

   }

}

   



步骤 2


从 singleton 类获取唯一的对象。


SingletonPatternDemo.java

public class SingletonPatternDemo {

   public static void main(String[] args) {

 

      //不合法的构造函数

      //编译时错误:构造函数 SingleObject() 是不可见的

      //SingleObject object = new SingleObject();

 

      //获取唯一可用的对象

      SingleObject object = SingleObject.getInstance();

 

      //显示消息

      object.showMessage();

   }

}

   



步骤 3


验证输出。

Hello World!

   



饿汉式:

public class Singleton {  

    // 直接创建对象

    private static Singleton instance = new Singleton();

    // 私有化构造函数  

    private Singleton (){}  

    // 返回对象实例

    public static Singleton getInstance() {  

    return instance;  

    }  

}

   



懒汉式:

public class Singleton {  

    // 声明变量

    private static Singleton instance;  

    // 私有化构造函数 

    private Singleton (){}  

    // 提供对外方法

    public static synchronized Singleton getInstance() {  

    if (instance == null) {  

        instance = new Singleton();  

    }  

    return instance;  

    }  

}

   



2. 工厂设计模式


工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。


在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。


工厂模式分为工厂方法模式和抽象工厂模式


一 、工厂方法模式


实现


我们将创建一个 Shape 接口和实现 Shape 接口的实体类。下一步是定义工厂类 ShapeFactory。


步骤 1


创建一个接口。


Shape.java

public interface Shape {

   void draw();

}

   



步骤 2


创建实现接口的实体类。


Circle.java

public class Circle implements Shape {

 

   @Override

   public void draw() {

      System.out.println("Inside Circle::draw() method.");

   }

}

   



步骤 3


创建一个工厂,生成基于给定信息的实体类的对象。


ShapeFactory.java

public class ShapeFactory {

 

   //使用 getShape 方法获取形状类型的对象

   public Shape getShape(String shapeType){

      if(shapeType == null){

         return null;

      }        

      if(shapeType.equalsIgnoreCase("CIRCLE")){

         return new Circle();

      }

      return null;

   }

}

   



步骤 4


使用该工厂,通过传递类型信息来获取实体类的对象。


FactoryPatternDemo.java


public class FactoryPatternDemo {

 

   public static void main(String[] args) {

      ShapeFactory shapeFactory = new ShapeFactory();

 

      //获取 Circle 的对象,并调用它的 draw 方法

      Shape shape1 = shapeFactory.getShape("CIRCLE");

 

      //调用 Circle 的 draw 方法

      shape1.draw();

   }

}

   



二、抽象工厂设计模式


工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码


步骤 1


为形状创建一个接口。


Shape.java


public interface Shape {

   void draw();

}

   



步骤 2


创建实现接口的实体类。


Circle.java

public class Circle implements Shape {

 

   @Override

   public void draw() {

      System.out.println("Inside Circle::draw() method.");

   }

}

   



步骤 3


为颜色创建一个接口。


Color.java

public interface Color {

   void fill();

}

   



步骤4


创建实现接口的实体类。


Red.java

public class Red implements Color {

 

   @Override

   public void fill() {

      System.out.println("Inside Red::fill() method.");

   }

}

   



步骤 5


为 Color 和 Shape 对象创建抽象类来获取工厂。


AbstractFactory.java

public abstract class AbstractFactory {

   abstract Color getColor(String color);

   abstract Shape getShape(String shape) ;

}

   



步骤 6


创建扩展了 AbstractFactory 的工厂类,基于给定的信息生成实体类的对象。


ShapeFactory.java

public class ShapeFactory extends AbstractFactory {

 

   @Override

   public Shape getShape(String shapeType){

      if(shapeType == null){

         return <code class="j    

   


本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注编程语言JAVA频道!


本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程