learning之工厂方法模式

来源:互联网 发布:淘宝店铺发货无需物流 编辑:程序博客网 时间:2024/06/09 17:51

本篇是工厂类设计模式简单学习示例。

一、工厂方法:

1、普通(简单)工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。

public interface Creator {    public void creat();}//实现类:public class Human implements Creator{    @Override    public void creat() {        System.out.print("Create human");    }}public class Monkey implements Creator{    @Override    public void creat() {        System.out.print("create Monkey");    }}//工厂类:public class CreateFactory {    public Creator Create(String type){        Creator creator=null;        if(type.equals("human")){            creator=new Human();        }else if(type.equals("monkey")){            creator=new Monkey();        }        return creator;    }}

2、多个工厂方法模式,是对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建对象。

//工厂类实现不同接口public class CreateFactory {    public Creator CreateHuman(){        return new Human();    }    public Creator CreateMonkey(){        return new Monkey();    }}


3、静态工厂方法模式,将上面的多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可。

public class CreateFactory {    public static Creator CreateHuman(){        return new Human();    }    public static Creator CreateMonkey(){        return new Monkey();    }}

运行示例:

public class Test {    public static void main(String[] args){        //普通工厂方法        CreateFactory createFactory=new CreateFactory();        Creator creator=createFactory.Create("monkey");        creator.creat();        //多个工厂方法模式        Creator creator1=createFactory.CreateHuman();        creator1.creat();        //静态工厂方法        Creator creator2=CreateFactory.CreateMonkey();    }}


二、抽象工厂模式
1、工厂方法模式产品的创建依赖工厂类,若想拓展新产品,必须对工厂类进行修改,这违背了闭包原则,所以,就有抽象工厂模式。创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码逻辑。

2、工厂模式中,一个工厂生产一个产品,所有产品派生于同一个抽象产品(或产品接口);而抽象工厂模式中,一个工厂生产多个产品,它们是一个产品族,不同的产品族的产品派生于不同的抽象产品(或产品接口)。


//工厂接口public interface factory {    public void factoryCreate();}public class HumanFactory implements factory{    @Override    public Creator factoryCreate() {        return new Human();    }}public class MonkeyFactory implements factory{    @Override    public Creator factoryCreate() {        return new Monkey();    }}public class Test {    public static void main(String[] args){        HumanFactory humanFactory=new HumanFactory();        Creator creator=humanFactory.factoryCreate();        creator.creat();        MonkeyFactory monkeyFactory=new MonkeyFactory();        Creator creator1=monkeyFactory.factoryCreate();        creator1.creat();    }}