设计模式之工厂模式(Factory Method)

Intent

定义了一个创建对象的接口,但由子类决定要实例化哪个类。工厂方法把实例化操作推迟到子类。

Class Diagram

在简单工厂中,创建对象的是另一个类,而在工厂方法中,是由子类来创建对象。
下图中,Factory 有一个 doSomething() 方法,这个方法需要用到一个产品对象,这个产品对象由 factoryMethod() 方法创建。该方法是抽象的,需要由子类去实现。
工厂模式UML

Implementation

产品接口

public interface Product {
}

工厂类

public abstract class Factory {
    abstract public Product factoryMethod();
    public void doSomething(){
        Product product = factoryMethod();
        //do something with product
    }
}

产品子类

public class ConcreteProduct implements Product {
    public ConcreteProduct() {
        System.out.println("ConcreteProduct has been created");
    }
}
public class ConcreteProduct1 implements Product {
    public ConcreteProduct1() {
        System.out.println("ConcreteProduct1 has been created");
    }
}
public class ConcreteProduct2 implements Product {
    public ConcreteProduct2() {
        System.out.println("ConcreteProduct2 has been created");
    }
}

工厂子类

public class ConcreteFactory extends Factory {
    @Override
    public Product factoryMethod() {
        return new ConcreteProduct();
    }
}
public class ConcreteFactory1 extends Factory {
    @Override
    public Product factoryMethod() {
        return new ConcreteProduct1();
    }
}
public class ConcreteFactory2 extends Factory {
    @Override
    public Product factoryMethod() {
        return new ConcreteProduct2();
    }
}

调用

public class Client {
    public static void main(String[] args) {
        Factory factory = new ConcreteFactory();
        Factory factory1 = new ConcreteFactory1();
        Factory factory2 = new ConcreteFactory2();
        factory.doSomething();
        factory1.doSomething();
        factory2.doSomething();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值