java常用设计模式学习

1.设计模式的概念

设计模式是一套被反复使用,大多数人知晓的,经过分类编目的,代码设计经验的总结。它描述了在软件设计过程中一些不断重复发生的问题,以及该问题的解决方案。也就是说它是解决特定问题的一系列套路,是前辈们代码设计经验的总结,具有一定的普遍性,可以反复使用,其目的是为了提高代码的可重用性,可读性,可靠性。

2.学习设计模式的意义

可以提高程序员的思维能力,编程能力和设计能力。

使程序设计更加标准化,代码编制更加工程化,使软件开发效率大大提高,从而缩短开发周期。

使设计的代码可重用性高,可读行强,可靠性高,灵活性好,可维护性强。

当然,软件设计模式只是一个引导,在具体的软件开发过程中,必须根据设计的应用系统特定和要求来恰当的选择。对于简单的程序开发,若能写一个简单的算法要比引入某种设计模式更加容易。但对大项目的开发或框架设计,使用设计模式来组织代码显然更好。

3.设计模式分类

总体来说设计23种模式可以分为三大类

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

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

行为型模式:共十一种,迭代模式,观察者模式,模板方法模式,命令模式,状态模式,策略模式,责任链模式,中介者模式,访问者模式,解释器模式,备忘录模式。

设计原则:

找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要的代码混在一起。(封装变化)

针对接口编程,而不是针对实现编程。

多用组合,少用继承。

模式分析:

策略模式:

策略模式定义了一组行为(算法),分别封装起来,让它们之间可以互相替换,此模式让行为(算法)的变化独立于使用它们的客户。

代理模式:

代理模式(proxy)属于结构性设计模式,为其它对象提供一种代理以控制对这个对象的访问,这样做到好处是可以在目标对象实现的基础上增强额外的功能,即扩展目标对象的功能。

扩展对象功能可以使用继承或组合,使用继承扩展对象功能有以下确定:不便于维护,假如有100个目标类要扩展功能就要写100个继承类来实现。如果目标类是使用final修饰符来修饰的则不能使用继承。所以可以考虑使用组合来实现目标对象功能的扩展。代理模式就利用了组合,代理对象里组合了目标对象,代理对象是对目标对象的扩展并会调用目标对象。

代理模式可以分为三类:静态代理,动态代理,cglib代理

静态代理:静态代理在使用时,需要定义接口或者父类,被代理的对象与代理对象一起实现相同的接口或继承相同的父类,

然后通过调用相同的方法来调用目标对象的方法。下面举个实例说明:

接口:IUser.java

public interface IUser{

    void run();

}

实现类:User.java

public class User implements IUser{

    public void run(){

       System.out.printle("奔跑吧,少年");

    }

}

代理类:UserProxy.java

public class UserProxy implements IUser{

    private IUser user;

    public UserProxy(Iuser user){

        this.user=user;

    }

    public void run(){

       System.out.printle("跑步前热身");//在调用目标对象方法前后添加一些功能

       user.run();

       System.out.printle("跑步后洗澡");

    }

}

测试类:Test.java

public class TestProxy{

    public void static main(String[] args){

        User user = new User();

        UserProxy proxy = new UserProxy(user);//把目标对象传给代理对象,建立代理关系

        proxy.run();

    }

}

静态代理总结:

1.面向对象的核心原则是OCP,即开放封闭原则,对扩展开放,对修改关闭。静态代理符合这一原则,可以在不修改目标对象的情况下对目标功能进行扩展

2缺点:因为代理对象需要与目标对象实现一样的接口,所以会有很多代理类,类太多。

如何解决静态代理中的缺点呢,答案就是使用动态代理

 

(持续更新。。。)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值