Java设计模式

设计模式的分类

创建型模式 对象的创建
结构型模式 对象的组成
行为型模式 对象的行为

简单工厂方法模式(静态工厂方法模式)

该模式里面需要提供一个类:工厂类(用它制造一些需要的对象)
  特点:
   构造方法私有化,外界不能直接创建它的对象
  提供静态功能,每一种静态都会产生所需要的对象...
  缺点:不利于后期维护
如果添加新的对象,需要创建它的类还需要在静态工厂类提供一些功能!

定义一个动物抽象类:

public abstract class Animal {public abstract void eat();
}

定义两个动物具体类,继承动物抽象类,重写里面的eat()方法

public class Cat extends Animal {@Overridepublic void eat() {System.out.println("猫吃鱼....");}}
public class Dog extends Animal {@Overridepublic void eat() {System.out.println("狗吃骨头...");}}

再创建一个动物工厂类,提供猫和狗这两种动物

public class AnimalFactory {private AnimalFactory() {}//提供猫和狗这两种动物public static Animal createAnimal(String type) {if("dog".equals(type)) {return new Dog();}else if("cat".equals(type)){return new Cat();}else {return null;}}
}

测试类:

public class AnimalDemo {public static void main(String[] args) {Dog dog = new Dog();dog.eat();Cat cat = new Cat();cat.eat();System.out.println("---------------");Animal a = AnimalFactory.createAnimal("cat");a.eat();a = AnimalFactory.createAnimal("dog");a.eat();a = AnimalFactory.createAnimal("erdan") ;if(a != null) {a.eat(); }else {System.out.println("目前工厂类没有提供该动物...");}}}

工厂模式

工厂方法模式:
特点:
  需要提供一个抽象类,以及每个动物的具体类和接口(工厂接口)
  该接口中的抽象方法的返回值是该抽象类
  针对每个具体动物都提供一些对应的工厂类--->实现该接口--->返回值就是需要具体的动物对象
 
  弊端:代码量大.

定义一个动物抽象类:

public abstract class Animal {public abstract void eat() ;
}

定义两个动物具体类,继承动物抽象类,重写里面的eat()方法

public class Cat extends Animal {@Overridepublic void eat() {System.out.println("猫吃鱼....");}}
public class Dog extends Animal {@Overridepublic void eat() {System.out.println("狗吃骨头....");}}

定义工厂类接口

public interface Factory {public abstract Animal createAnimal();
}

分别定义cat和dog的工厂类,实现工厂接口

public class CatFactory implements Factory {@Overridepublic Animal createAnimal() {return new Cat();}}
public class DogFactory implements Factory {@Overridepublic Animal createAnimal() {return new Dog();}}

测试类

public class AnimalDemo {public static void main(String[] args) {//猫工厂生产猫DogFactory d = new DogFactory();Animal a = d.createAnimal();a.eat();System.out.println("------------");//狗工厂生产狗CatFactory c = new CatFactory();a = c.createAnimal();a.eat();}
}

单例模式

定义:在内存中始终只有一个对象
  饿汉式
  特点:当前某一个一加载,就会创建一个对象
  需要将该类的无参构造私有化
  在成员变量创建该类的实例
需要提供公共的访问方法(实际开发中使用这种方式)
  懒汉式
  特点:并不是加载某个类就直接创建对象,而是需要的时候在创建对象
  1)懒加载(延迟加载)
2)线程的安全问题
  线程安全问题检验标准:
  a:是否是多线程环境
  b:是否有共享数据
   c:是否有多条语句对共享数据进行操作!
 
   使用同步代码块或同步方法(synchronized)进行解决

饿汉式:

public class Student {//无参构造私有化,目的是为了让外界不创建对象private Student() {}//在成员变量的位置创建该类的实例//静态只能访问静态,所以需要加上静态修饰//为了不让外界修改当前这个实例,所以加入private修饰private static Student s = new Student();public static Student getStudent() {return s; }
public class StudentDemo {public static void main(String[] args) {//利用静态的公共访问方法创建对象,防止外界修改当前Student类的中实例Student s1 = Student.getStudent() ;Student s2 = Student.getStudent();System.out.println(s1==s2);System.out.println(s1);System.out.println(s2);}
}

懒汉式:

public class Teacher {private Teacher() {}//在成员变量位置声明变量private static Teacher t = null ; //共享数据//提供公共的方法访问public synchronized static Teacher getTeacher(){ //Teacher.class锁对象//判断 当当前该对象没有更多引用的时候,才创建对象if(t==null){t = new Teacher() ;}return t ;}}
public class TeacherDemo {public static void main(String[] args) {Teacher t1 = Teacher.getTeacher();Teacher t2 = Teacher.getTeacher();System.out.println(t1==t2);//trueSystem.out.println(t1);System.out.println(t2);}
}

面试题: 简单阐述下单例模式有几种,并且写出一个单例模式代码!(写懒汉式),
   就想问你能否想到懒汉式中多线程的安全问题...
 
  
   如果是开发中,使用单例模式,那么使用的   --->饿汉式(不会出现问题的单例模式)
 
  如果是面试中,使用单例模式,----->懒汉式(想问你能否想到懒汉式中多线程的安全问题以及解决办法)

Java几种设计模式相关推荐

  1. java 23种设计模式 04 单例模式

    java 23种设计模式 04 单例模式 一.什么是单例模式 单例模式是一种对象创建型模式,使用单例模式,可以保证为一个类只生成唯一的实例对象.也就是说,在整个程序空间中,该类只存在一个实例对象.   ...

  2. 深入浅出Java 23种设计模式,最全PDF版本终于开放下载了!!(文末有福利)

    写在前面 在「 冰河技术 」微信公众号中[设计模式专题]更新完毕已有一段时间了.不少小伙伴在我微信上留言说:冰河,你能不能把[设计模式专题]的文章汇总成PDF文档呢?一直没有时间整理,最近在公众号后台 ...

  3. 【设计模式】Java 23种设计模式对比总结

    一.设计模式的分类 创建型模式,共五种(1-5):工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种(6-12):适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组 ...

  4. java 23种设计模式及具体例子 收藏有时间慢慢看

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代 码可靠性. 毫无疑问,设计模式 ...

  5. Java两种设计模式_23种设计模式(11)java策略模式

    23种设计模式第四篇:java策略模式 定义:定义一组算法,将每个算法都封装起来,并且使他们之间可以互换. 类型:行为类模式 类图: 策略模式是对算法的封装,把一系列的算法分别封装到对应的类中,并且这 ...

  6. java 23种设计模式(转载)

    设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  7. java 23种设计模式详解

    1. 软件设计模式意义 文章链接:http://c.biancheng.net/design_pattern/     设计模式的本质是对面向对象设计原则运用,是对类的封装.继承和多态以及类的关联关系 ...

  8. Java 23 种设计模式精讲

    软件设计的原则 1. 开闭原则 定义:软件实体应当对扩展开放,对修改关闭. 2. 里氏替换原则 定义:继承必须保证超类所拥有的性质在子类中仍然成立.即子类在继承父类时,除了添加新的方法来新增功能外,尽 ...

  9. 【Java 23 种设计模式】原则(1)

    原则 设计模式的来源 设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路.它不是语法规定,而是一套用来提高代码可复用性.可维护性.可读性.稳健性以及安全性 ...

  10. java 23种设计模式学习。

    一.3大类设计模式:创建型,结构型,行为型. a.5种创建型模式:工厂方法,抽象工厂,单例,建造者,原型. b.7种结构型模式:适配器,装饰器,代理,外观,桥接,组合,享元. c.11种行为型模式:策 ...

最新文章

  1. P1772 [ZJOI2006]物流运输
  2. 在Debian/Ubuntu上面安装升级nginx到最新版
  3. 猜数字游戏python程序gui_python GUI 猜数字游戏
  4. sqlserver中删除重复行的方法
  5. php程序包括什么,php程序是什么
  6. ASP.NET MVC 入门8、ModelState与数据验证
  7. Anaconda卸载与重装过程记录
  8. 今天我们聊聊,小程序开发的入手门槛还是比较低的
  9. 前端重构实践(一) —— 性能优化
  10. python整数作为条件_Python基本概念介绍
  11. 图像空域增强:卷积运算法
  12. mysql 密码过期解决图例_MYSQL 密码过期解决办法
  13. 八大排序算法(原理+代码详解)Python版
  14. 关于Sign in with Apple (Apple 登录) PHP的后端验证
  15. 给深度学习入门者的Python快速教程 - numpy和Matplotlib篇
  16. Qt数据导出csv防止科学记数法
  17. Stata 基础知识 1
  18. vue3实现电子实时时钟(动态时钟)
  19. 图嵌入Node2Vec安装
  20. openssl evp

热门文章

  1. 关于时域、频域和波数域的一些概念
  2. 单片机工程师面试题小计
  3. Java实验一—编程实现计算贷款偿还额的程序
  4. sql查询数据库表中重复数值
  5. C++ 在函数中定义函数
  6. (二)提升树模型:Xgboost原理与实践
  7. 【Python 每日一技】根据任意分隔符分割字符串
  8. ubuntu20.04安装opencv4.7
  9. Oracle sql创建序列sequence
  10. Android APP调起小程序