设计模式第一篇 工厂方法模式

为什么把这个模式作为第一篇,以为面试的时候被问过,只答对了一半。

工厂方法模式的定义:

定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟的其子类。

工厂模式:

        首先需要说一下工厂模式。工厂模式根据抽象程度的不同分为三种:简单工厂模式(也叫静态工厂模式)、本文所讲述的工厂方法模式、以及抽象工厂模式。工厂模式是编程中经常用到的一种模式。它的主要优点有:

可以使代码结构清晰,有效地封装变化。在编程中,产品类的实例化有时候是比较复杂和多变的,通过工厂模式,将产品的实例化封装起来,使得调用者根本无需关心产品的实例化过程,只需依赖工厂即可得到自己想要的产品。

对调用者屏蔽具体的产品类。如果使用工厂模式,调用者只关心产品的接口就可以了,至于具体的实现,调用者根本无需关心。即使变更了具体的实现,对调用者来说没有任何影响。

降低耦合度。产品类的实例化通常来说是很复杂的,它需要依赖很多的类,而这些类对于调用者来说根本无需知道,如果使用了工厂方法,我们需要做的仅仅是实例化好产品类,然后交给调用者使用。对调用者来说,产品所依赖的类都是透明的。

抽象产品类:

public abstract class Product {
    public void method1(){
    }

    public abstract void method2();
}
具体产品类:

具体的产品类可以有多个,都继承于抽象产品类。

public class ConcreteProduct1 extends Product {
    public void method2(){
    }
}
public class ConcreteProduct2 extends Product {
    public void method2(){
    }
}
抽象工厂类:

public abstract class Creator{
    public abstract <T extends Product> T createProduct(Class<T> c);
}

具体如何产生一个产品的对象,是由具体的工厂类实现的。

具体工厂类:

public class ConcreteCreator extends Creator{
    public < T extends Product> T createPorduct(Class<T> c){
    Product product = null;
    product = (Product)Class.forname(c.getName()).newInstance();
    return (T)product;
    }
}

接下来就是场景类的调用方法:

public class Client{
    public static void main(String[] args){         
        Creator creator = new ConcretorCreator();
        Product product = creator.createProduct(ConcreteProduct1.class);
    }
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值