本篇是工厂类设计模式简单学习示例。
一、工厂方法:
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(); } }