设计模式-工厂方法模式

来源:互联网 发布:c语言去掉字符串结束符 编辑:程序博客网 时间:2024/05/29 18:27

设计模式-工厂方法模式

算是看书的笔记并非原创,总结:

工厂方法模式定义

Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses
定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。

工厂方法模式的使用场景

首先,工厂方法模式是new一个对象的替代品,所以中所有需要生产对象的地方都可以使用,单是需要慎重考虑是否要增加一个工厂类进行管理,增加代码的复杂度。

  • 调用者不知道它要创建的是那一个子类
  • 一个类想要有自己的子类来定义某对象的创建过程
  • 类将创建某对象的职责代理给一些帮助子类中的一个,并且你想要将哪一个子类作为代理的信心进行局部化

代码清单

抽象产品类

public abstract class product {    //产品类的公共方法    public void method1(){        System.out.println("产品类的公共方法业务逻辑");    }    public abstract void method2();}

具体产品类

public class ProductOne extends product {    @Override    public void method2() {        // TODO Auto-generated method stub        System.out.println("ProductOne method2 ********");    }}public class ProductTow extends product {    @Override    public void method2() {        // TODO Auto-generated method stub        System.out.println("ProductTow method2 *********");    }}

抽象工厂类

public abstract class Creator {    public abstract <T extends product> T CreatorProduct(Class<T> c);}

具体工厂类

public class CreatorFactory extends Creator {    @Override    public <T extends product> T CreatorProduct(Class<T> c) {        // TODO Auto-generated method stub        product pro = null;        try {            pro = (product)Class.forName(c.getName()).newInstance();        } catch (Exception e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        return (T) pro;    }}

场景类

public static void main(String[] args) {        CreatorFactory factory = new CreatorFactory();        product productOne = factory.CreatorProduct(ProductOne.class);        productOne.method1();        productOne.method2();        product producttow = factory.CreatorProduct(ProductTow.class);        producttow.method1();        producttow.method2();    }

工厂方法模式的扩展

1,缩小为简单工厂模式
2,升级为多个工厂类
3,代替单例模式
4,延迟初始化

0 0
原创粉丝点击