本次讲解的是简单工厂模式
简单工厂模式又叫静态工厂方法模式,是所有工厂模式中最简单的一个。
创建型模式大致有以下几种:
1、简单工厂模式Simple Factory
2、工厂模式Factory
3、抽象工厂模式Abstract Factory
4、单例模式 Singleton
5、原型模式Protorype
6、创建者模式Builder
1.首先分析简单工厂模式的优缺点:
优点:
在简单工厂模式中,客户端不在负责对象的创建,而是把这个责任丢给了具体的工厂类,客户端只负责对对象的调用,从而明确了各个类的职责
缺点:
由于简单工厂模式使用静态方法来创建对象,这就导致了静态方法无法被继承。而另一方面,这个工厂类负责所有的对象的创建,这会导致虽然产品的不断增多,可能客户端对于某些产品的创建方式会有不同的要求,这样的话,就要不断的修改工厂类,增加响应的判断逻辑,不利于后期的维护。
根据面向对象的思想,要继续地进行职责的分配和封装,也就是说如果每一个产品都能由一个具体的工厂来创建,把简单工厂模式中的那个庞大的工厂类拆分成一个个小的工厂类,不就可以了吗?
使用场景:
2。简单工厂模式的UML类图
示例代码:
抽象产品类
package cn.victor.changgui; //抽象产品类 public interface Project { public void operation(); }
具体 产品类
package cn.victor.changgui; //具体产品类 public class Project1 implements Project { @Override public void operation() { // TODO Auto-generated method stub } }
package cn.victor.changgui; //具体产品类 public class Project2 implements Project { @Override public void operation() { // TODO Auto-generated method stub } }
工厂类:
package cn.victor.changgui; //工厂类 public class SimpleFactory { //根据参数创建不同的对象 public static Project createProject(String projectName){ if ("1".equals(projectName)) { return new Project1(); }else if ("2".equals(projectName)) { return new Project2(); } return null; } }
下面给一个案例,进行详细的说明:
接口
package cn.victor.simplefactory; public interface Animal { //所有动物都有吃的动作 public void eat(); }
实体类
package cn.victor.simplefactory; public class Tiger implements Animal { //l老虎还会跑 public void run(){ System.out.println("老虎会跑!"); } @Override public void eat() { // TODO Auto-generated method stub System.out.println("老虎会吃"); } }
package cn.victor.simplefactory; public class Dolphin implements Animal { public void swin(){ System.out.println("海豚会游泳"); } @Override public void eat() { // TODO Auto-generated method stub System.out.println("海豚会吃"); } }
package cn.victor.simplefactory; public class Parrot implements Animal { public void fly() { System.out.println("鹦鹉会飞"); } @Override public void eat() { // TODO Auto-generated method stub System.out.println("鹦鹉会吃"); } }
工厂方法类
package cn.victor.simplefactory; public class SimpleFactory { //根据参数创建不同的对象 public static Animal createAnimal(String animalName){ if ("Tiger".equals(animalName)) { return new Tiger(); }else if ("Dolphin".equals(animalName)) { return new Dolphin(); }else if ("Parrot".equals(animalName)) { return new Parrot(); } return null; } }
客户端类
package cn.victor.simplefactory; public class Client { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Animal animal=SimpleFactory.createAnimal("Tiger"); animal.eat(); Animal animal2=SimpleFactory.createAnimal("Dolphin"); animal2.eat(); Animal animal3=SimpleFactory.createAnimal("Parrot"); animal3.eat(); } }
此就是一个简单工厂方法模式;
代码下载:
代码下载--简单工厂模式