设计模式1 - 简单工厂模式
工厂模式介绍
工厂模式是java中最常用的设计模式之一,它属于创建型模式,它提供一种创建对象的最佳方式。在客户端创建对象的时候,不直接暴露对象的创建(直接new该类), 它通过一个共同的接口来指向新创建的对象。相当于把该对象封装在一个类里面,用最外层的类去得到被封装类的对象。
在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
模式结构
在简单工厂中,包含如下角色:
Factory:工厂角色
这个角色主要封装,创建所有实例的内部逻辑。
Product:抽象产品角色
它是所有对象的基类,主要负责描述所有实例所共有的公共接口。就是把共同的方法抽取出来。不同的子类去继承这个父类,根据不同的需求来自己实现公共方法的逻辑。
ConcreteProduct:具体产品角色
这个就是我们要的创建目标,根据不同的需求去创建不同的角色,去继承父类就行了。
下面是类图的表示:
根据不同的参数,就创建不同的实例对象。
代码
Factory:
public class Factory {
/** * 根据输入的名字来决定实例化哪个类 * @param proName * @return */public Product createProduct(String proName) { Product product = null; if ("A".equals(proName)) { product = new ConcreteProductA(); } else if ("B".equals(proName)) { product = new ConcreteProductB(); } return product;}复制代码
} Product:
public abstract class Product {
/** * 所有子类的共同方法,抽象出基类 */ protected abstract void comMethod();复制代码
} ConcreteProduct: 具体类A
/**
-
@author Stone
-
@version V1.0
-
@description: 具体的类A
-
@date 9/22/18 09:56
-
@email */ public class ConcreteProductA extends Product{
@Override protected void comMethod() { System.out.println("具体的类:ConcreteProductA"); } } 具体类B
/**
- @author Stone
- @version V1.0
- @description: 具体的类B
- @date 9/22/18 09:57
- @email */ public class ConcreteProductB extends Product{ @Override protected void comMethod() { System.out.println("具体的类:ConcreteProductB"); } } 测试代码
public class Test {
public static void main(String[] args) { Factory factory = new Factory(); Product product = factory.createProduct("A"); product.comMethod(); product = factory.createProduct("B"); product.comMethod();}复制代码
}
-打印输出结果:
具体的类:ConcreteProductA 具体的类:ConcreteProductB 简单工厂模式的优点 可以根据不同的标示去实例不同的产品类型。客户端不负责创建对象的逻辑,一切都有工厂内部逻辑决定。
简单工厂模式的缺点 后续的扩展比较麻烦,如果需要额外新增产品,则需要在工厂中添加相应的判断。会造成if else 过多,不利于系统的扩展和维护。
参考链接: