网站 开发,工商管理网站,协会工作方案网站建设困难,展览公司网站建设目录 一、简单工厂模式简介1. 定义2. 使用动机 二、简单工厂模式结构1.模式结构2. 时序图 三、简单工厂的使用实例四、简单工厂模式优缺点五、简单工厂模式在Java中的应用 一、简单工厂模式简介
原文链接
1. 定义
简单工厂模式(Simple Factory Pattern)#xff1a;又称为静… 目录 一、简单工厂模式简介1. 定义2. 使用动机 二、简单工厂模式结构1.模式结构2. 时序图 三、简单工厂的使用实例四、简单工厂模式优缺点五、简单工厂模式在Java中的应用 一、简单工厂模式简介
原文链接
1. 定义
简单工厂模式(Simple Factory Pattern)又称为静态工厂方法(Static Factory Method)模式它属于类创建型模式。在简单工厂模式中可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例被创建的实例通常都具有共同的父类。
2. 使用动机
考虑一个简单的软件应用场景一个软件系统可以提供多个外观不同的按钮如圆形按钮、矩形按钮、菱形按钮等 这些按钮都源自同一个基类不过在继承基类后不同的子类修改了部分属性从而使得它们可以呈现不同的外观。
如果我们希望在使用这些按钮时不需要知道这些具体按钮类的名字只需要知道表示该按钮类的一个参数并提供一个调用方便的方法把该参数传入方法即可返回一个相应的按钮对象此时就可以使用简单工厂模式。
二、简单工厂模式结构
1.模式结构 简单工厂模式包含如下角色 Factory工厂角色 工厂角色负责实现创建所有实例的内部逻辑 Product抽象产品角色 抽象产品角色是所创建的所有对象的父类负责描述所有实例所共有的公共接口 具体产品角色是创建目标所有创建的对象都充当这个角色的某个具体类的实例。
2. 时序图 ①先调用工厂类中的静态方法createProduct()
②根据传入产品类型参数获得具体的产品对象
③返回产品对象并使用
三、简单工厂的使用实例 抽象动物类
public abstract class Animal {public abstract void eat();
}具体动物类猫
public class Cat extends Animal {Overridepublic void eat() {System.out.println(猫吃鱼);}
}具体动物类狗
public class Dog extends Animal {Overridepublic void eat() {System.out.println(狗吃肉);}
}工厂类AnimalFactory 根据调用者不同的要求创建出不同的登录对象并返回。而如果碰到不合法的要求会返回null。
public class AnimalFactory {public static Animal createAnimal(String name) {if (dog.equals(name)) {return new Dog();} else if (cat.equals(name)) {return new Cat();} else {return null;}}
}测试调用
public class Test {public static void main(String[]args){Dog d (Dog) AnimalFactory.createAnimal(dog);d.eat();Cat c (Cat) AnimalFactory.createAnimal(cat);c.eat();}
}输出结果
四、简单工厂模式优缺点
优点 通过使用工厂类外界不再需要关心如何创造各种具体的产品只要提供一个产品的名称作为参数传给工厂就可以直接得到一个想要的产品对象并且可以按照接口规范来调用产品对象的所有功能方法。
构造容易逻辑简单。
缺点 简单工厂模式中的if else判断非常多完全是Hard Code如果有一个新产品要加进来就要同时添加一个新产品类并且必须修改工厂类再加入一个 else if 分支才可以 这样就违背了 “开放-关闭原则”中的对修改关闭的准则了。当系统中的具体产品类不断增多时候就要不断的修改工厂类对系统的维护和扩展不利。 一个工厂类中集合了所有的类的实例创建逻辑违反了高内聚的责任分配原则将全部的创建逻辑都集中到了一个工厂类当中所有的业务逻辑都在这个工厂类中实现。什么时候它不能工作了整个系统都会受到影响。因此一般只在很简单的情况下应用比如当工厂类负责创建的对象比较少时。 简单工厂模式由于使用了静态工厂方法造成工厂角色无法形成基于继承的等级结构。
适用环境 在以下情况下可以使用简单工厂模式
工厂类负责创建的对象比较少由于创建的对象较少不会造成工厂方法中的业务逻辑太过复杂。
客户端只知道传入工厂类的参数对于如何创建对象不关心客户端既不需要关心创建细节甚至连类名都不需要记住只需要知道类型所对应的参数。
五、简单工厂模式在Java中的应用
JDK类库中广泛使用了简单工厂模式如工具类java.text.DateFormat它用于格式化一个本地日期或者时间。
public final static DateFormat getDateInstance();
public final static DateFormat getDateInstance(int style);
public final static DateFormat getDateInstance(int style,Locale
locale);Java加密技术获取不同加密算法的密钥生成器:
KeyGenerator keyGenKeyGenerator.getInstance(DESede);Cipher cpCipher.getInstance(DESede);