zoukankan      html  css  js  c++  java
  • 工厂模式

    定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。

    一个通用栗子如下:

     1 //抽象产品类
     2 public abstract class Product{
     3     public void method1(){}
     4     public void method2(){}
     5 }
     6 //具体产品类
     7 public class ConcreateProduct1 extends Product{
     8     public void method1(){}
     9 }
    10 public class ConcreateProduct2 extends Product{
    11     public void method2(){}
    12 }
    13 //抽象工厂类
    14 public abstract class Creator{
    15     //创建一个产品对象,其输入参数类型可以自行设置
    16     //可以为String,Enum,Class等 也可以为空
    17     public abstract <T extends Product> T createProduct(Class<T> c);
    18 }
    19 //由具体工厂类产生具体的产品对象
    20 public class ConcreateCreator extends Creator{
    21     public <T extends Product> T createProduct(Class<T> c){
    22         Product  product = null;
    23         try{
    24             product = (Product)Class.forName(c.getName()).newInstance();
    25         }catch(Exception e){
    26             //异常处理
    27         }
    28         return (T)product;
    29 }
    30 //场景调用方法
    31 public class Client{
    32     public static void main(String[] args){
    33         Creator creator = new ConcreateCreactor();
    34         Product product = creator.createProduct(ConcreateProduct1 .class);
    35     }
    36 }

    上述只是一个简单示例,根据需要可自由扩展,工厂模式有以下优点:

    • 具有良好封装性,代码结构清晰。只要给定一个类名或约束字符串就可以得到一个具体对象,封装了复杂的创建过程,降低了耦合性;
    • 良好的扩展性,是一个典型的解耦框架。适当修改工厂类或简单的扩展,就可以应对产品类的变化,符合迪米特原则、依赖倒置原则、里氏替换原则;
    • 屏蔽产品类。不关心产品类的变化,只关注产品的接口,比如使用JDBC连接数据库,当从MYSQL迁移到ORACLE时,只需要修改下驱动名称即可,方便又灵活。
  • 相关阅读:
    极大/小搜索,alpha/beta剪枝
    消息系统
    渲染主线程都在干什么
    好玩的虚拟CPU执行代码
    好玩的隐藏属性
    好玩的对象存储
    透视投影矩阵
    绕任意轴旋转
    视图变换
    正交投影矩阵
  • 原文地址:https://www.cnblogs.com/loveBolin/p/9678318.html
Copyright © 2011-2022 走看看