Java中常用到的部分设计模式

来源:互联网 发布:阿里云 和 aws 对比 编辑:程序博客网 时间:2024/05/16 15:55

Java中常用到的部分设计模式

下面我提到的很多模式我们在大神写的代码中经常遇到,或者自己在写代码时也会用,但很多时候对于初级程序员而言不知道或者不清楚,闲来无事,觉得有必要整理下,提醒自己日后代码要简洁、少冗余,也希望能帮助到更多像我这初入职场慢慢摸索的初级程序员,对你有帮助请点赞评论,有错误或者理解不到位的地方希望私信不要踩,妹子比较情绪化,给个面子,哈哈~~~:

学如逆水行舟,不进则退。 —【名人名言】

  • 普通工厂模式
  • 单例模式

创建型模式

1.普通工厂模式

工厂模式有普通工厂模式和抽象工厂模式,在这里我先写普通工厂模式,我们平时可能用的比较多。
本人是吃货,就拿吃举例子吧,我们吃中国菜和吃西餐,都要进行吃这个动作,所以我们把它定义成一个接口,多次实现即可。

定义吃的这个接口
public interface Eater{    public void Eat();}
定义两个实现类

1)吃中国菜的实现类

public class ChinaFoodEat implements Eater{    public void Eat() {        System.out.println("this is ChinaFoodEat!");     }}

2)吃西餐的实现类

public class WesternFoodEat implements Eater{    public void Eat() {        System.out.println("this is WesternFoodEat!");     }}
写一个公共方法
public class EatFactory {    public static Sender ChinaFood() {        return new ChinaFoodEat();    }    public static Sender WesternFood() {        return new WesternFoodEat ();    }}        
定义测试类
public class FactoryMethod {    public static void main(String[] args) {        Eater eater = EatFactory.ChinaFood();        eater.Eat();        } }       

结果是:this is ChinaFoodEat!
工厂模式的特点就是可以多扩展,有需要创建工厂类即可,一般我们写静态方法,直接用类调用静态方法,省去创建对象的步骤,比较方便。

2.单例模式

单例模式保证在JVM中只有一个实例存在,它的好处显而易见:
1)只能创建一个实例,减轻了gc的回收机制的压力。
2)不用类经常频繁的创建实例,节省开销。

单例模式有懒汉式饿汉式,现附上代码,再一一解释:

饿汉式

public class HungrySingleton {    private static HungrySingleton hSingleton = new HungrySingleton();    private HungrySingleton() {}    public static HungrySingleton gethSingleton() {        return hSingleton;    }    public static void sethSingleton(HungrySingleton hSingleton) {        HungrySingleton.hSingleton = hSingleton;    }}

上面的代码是饿汉式单例模式,何谓饿汉式,即在类加载时就创建对象实例,饿了嘛,不管用不用,先把这个对象给我创建出来,这样做无需判断,节省时间。当HungrySingleton类加载时,无参构造方法就创建了对象,将这个对象给予了静态属性hSingleton。

懒汉式

public class LazySingleton {    private static LazySingleton laSingleton = null;    private LazySingleton() {}    public static LazySingleton getLaSingleton() {        if (laSingleton==null) {            laSingleton = new  LazySingleton();        }        return laSingleton;    }}

上面的代码是懒汉式单例模式,与上面饿汉式代码相比,显而易见是等到需要时判断后才创建实例。这种比较适合多线程,是线程安全的。