Java 的工厂方法及代理模式

Java 的工厂方法及代理模式

工厂方法(FactoryMethod)

概述:定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod使一个类的实例化延迟到其子类。

适用性:

  1. 当一个类不知道它所必须创建的对象的类的时候
  2. 当一个类希望由它的子类来指定它所创建的对象的时候
  3. 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候
    这里写图片描述

示例可参考:http://blog.csdn.net/jason0539/article/details/23020989

总结:

FactoryMethod模式是设计模式中应用最为广泛的模式,在面向对象的编程中,对象的创建工作非常简单,对象的创建时机却很重要。FactoryMethod解决的就是这个问题,它通过面向对象的手法,将所要创建的具体对象的创建工作延迟到了子类,从而提供了一种扩展的策略,较好的解决了这种紧耦合的关系。

代理模式(Proxy)

概述:为其他对象提供一种代理以控制对这个对象的访问

示例:引用自http://blog.csdn.net/goskalrie/article/details/52458773

/**方式一:聚合式静态代理
 * @author Goser    (mailto:goskalrie@163.com)
 * @Since 2016年9月7日
 */
//1.抽象主题接口
public interface Manager {
    void doSomething();
}
//2.真实主题类
public class Admin implements Manager {
    public void doSomething() {
        System.out.println("Admin do something.");
    }
}
//3.以聚合方式实现的代理主题
public class AdminPoly implements Manager{
    private Admin admin;

    public AdminPoly(Admin admin) {
        super();
        this.admin = admin;
    }

    public void doSomething() {
        System.out.println("Log:admin操作开始");
        admin.doSomething();
        System.out.println("Log:admin操作结束");
    }
}
//4.测试代码
        Admin admin = new Admin();
        Manager m = new AdminPoly(admin);
        m.doSomething();
//方式二:继承式静态代理
//与上面的方式仅代理类和测试代码不同
//1.代理类
public class AdminProxy extends Admin {
    @Override
    public void doSomething() {
        System.out.println("Log:admin操作开始");
        super.doSomething();
        System.out.println("Log:admin操作开始");
    }
}
//2.测试代码
        AdminProxy proxy = new AdminProxy();
        proxy.doSomething();
接口用法总结
  • 通过接口可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系。
  • 通过接口可以指明多个类需要实现的方法,一般用于定义对象的扩张功能。
  • 接口主要用来定义规范。解除耦合关系
接口与抽象类的关系
No.区别点抽象类接口
1定义包含一个抽象方法的类抽象方法和全局常量的集合
2组成构造方法、抽象方法、普通方法、常量、变量常量、抽象方法
3使用子类继承抽象类(extends)子类实现接口(implements)
4关系抽象类可以实现多个接口接口不能继承抽象类,但允许继承多个接口
5常见设计模式模板设计工厂设计、代理设计
6对象都通过对象的多态性产生实例化对象
7局限抽象类有单继承的局限接口没有此局限
8实际作为一个模板是作为一个标准或是表示一种能力
9选择如果抽象类和接口都可以使用的话,优先使用接口,因为避免单继承的局限
10特殊一个抽象类中可以包含多个接口,一个接口中可以包含多个抽象类
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值