设计模式002-工厂方法模式

 

1)简单工厂模式(静态工厂方法):根据参数类型type创建不同类型的实例。

package com.factorymethod;

public class FactoryMethod {
    public static void main(String[] args) {
        Application application = new Application();
        Product product = application.getObject("A1");
        product.method();
    }
}

interface Product{
    public void method();
}

class ProductA implements Product {
    public void method(){
        System.out.println("ProductA.method executed");
    }
}

class ProductA1 implements Product {
    public void method(){
        System.out.println("ProductA1.method executed");
    }
}

class SimpleFactory{
    public static Product createProduct(String type){
        if("A".equals(type)){
            return new ProductA();
        }else if("A1".equals(type)){
            return new ProductA1();
        }
        return null;
    }
}

class Application {
    private Product createProduct(String type){
        //...
        return SimpleFactory.createProduct(type);
    }
    Product getObject(String type){
        return createProduct(type);
    }
}

2)concrete工厂方法模式:

  1. 当你不知道对象的确切类型的时候
  2. 当你希望为库或者框架提供其内部组件的方法时

主要优点:

  1. 将具体产品和创建者解耦
  2. 符合单一职责原则
  3. 符合开闭原则
package com.factorymethod;

public class FactoryMethod {
    public static void main(String[] args) {
        Application application = new concreteProductA1();
        Product product = application.getObject();
        product.method();
    }
}

interface Product{
    public void method();
}

class ProductA implements Product {
    public void method(){
        System.out.println("ProductA.method executed");
    }
}

class ProductA1 implements Product {
    public void method(){
        System.out.println("ProductA1.method executed");
    }
}

abstract class Application {
    abstract Product createProduct();
    Product getObject(){
        return createProduct();
    }
}

class concreteProductA extends Application{
    @Override
    Product createProduct() {
        return new ProductA();
    }
}

class concreteProductA1 extends Application{
    @Override
    Product createProduct() {
        return new ProductA1();
    }
}

源码中的应用:

//静态工厂方法
java.util.Calendar.getInstance();
java.util.ResourceBundle.getBundle();
java.text.NumberFormat.getInstance();

//工厂方法
java.net.URLStreamHandlerFactory
createMarshaller


 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值