• 23种设计模式----------工厂模式.


    女娲造人故事开头(借由设计模式之禅):

      第一次烤泥人,感觉应该熟了,往大地一放,哇,没烤熟!于是白人诞生了!(这也是缺乏经验的最好证明)

      第二次烤泥人,上一次没烤熟,这一次多烤一会,放到世间一看,嘿,烤过头了,于是黑人诞生了!

      第三次烤泥人,一边烤一边察看,直到表皮嫩黄,嘿,真正好,于是黄色人种出现了!


    言归正传,所谓的工厂模式,要从工厂说起,工厂就是制造生产东西的,所以,也很容易知道工厂模式就是,利用工厂生产对象。所以,工厂模式,要有工厂和需要生产的产品。

    工厂模式的好处就在于,不需要知道对象是怎么产生的,只需要通过工厂我们可以根据不同的要求得到对应的对象。这样,既体现了封装,也表现了堕胎性。

    由于需要生产具体的东西并不是很确定,所以产品一般都会是抽象类。

    抽象产品代码:

    //总球类
    public abstract class Ball {
        public void fun1(){
            
        }
        public abstract void fun2();
    }

    然后,只需让具体的产品集成该抽象类(所以一个工厂基本是生产一类产品)。

    //足球
    public class Football extends Ball {
        
        public void fun2() {
            
        }
    }
    //篮球
    public class Basketball extends Ball {
    
        public void fun2() {
    
        }
    }

    抽象工厂类定义产品生产方法:

    1 //抽象工厂
    2 public abstract class Factory {
    3     
    4     public abstract <T extends Ball> T createBall(Class<T> c);
    5     
    6 }

    是生产哪种具体球,具体的工厂类实现来确定。

     1 public class BallFactory extends Factory {
     2     @Override
     3     public <T extends Ball> T createBall(Class<T> c) {
     4         Ball ball = null;
     5         try {
     6             ball = (Ball) Class.forName(c.getName()).newInstance();
     7         }  catch (Exception e) {
     8             e.printStackTrace();
     9         }
    10         
    11         return (T) ball;
    12     }
    13 }

    具体生产出的球类:

    1 public class Client {
    2     public static void main(String[] args) {
    3         Factory factory = new BallFactory();
    4                 //通过工厂生产出的足球类!
    5         Ball footBall = factory.createBall(Football.class);
    6     }
    7 }    

    这种简单的工厂模式,就设计好了。!


    单例工厂模式:

     1 //单例类
     2 public class Singleton {
     3     private Singleton(){
     4         
     5     }
     6 }
     7 
     8 //单例工厂
     9 public class SingletonFactory {
    10     private static Singleton single;
    11     //生成实力
    12     static{
    13         try {
    14             Class<?> clazz = Class.forName(Singleton.class.getName());
    15             Constructor<?> constructor = clazz.getDeclaredConstructor();
    16             constructor.setAccessible(true);
    17             single = (Singleton) constructor.newInstance();
    18         } catch (Exception e) {
    19             e.printStackTrace();
    20         }
    21     }
    22     //获取示例的方法
    23     public static Singleton getInstance(){
    24         return single;
    25     }
    26 }

    在项目中,其实我们就有用到很多工厂模式,比如spring中的BeanFactory,我们通过spring容器帮我们创建我们所需要的实例对象,并不需要知道创建过程,并且维护该对象的生命周期也是通过spring,这样,封装性更好,同时扩展性也大大增强,更加安全!

  • 相关阅读:
    关于idea中启动clean时Process terminated报错
    关于idea启动jsp时候Please, configure Web Facet first!
    关于Javaweb中jstl的foreach不能显示数据的问题
    关于Javaweb中报错信息Cause: java.sql.SQLException: Unknown initial character set index '255' received from server.解决办法
    关于使用idea 进行druid的数据库连接报错解决Cannot resolve com.mysq.jdbc.Connection.ping method. Will use 'SELECT 1' instead
    关于c3p0中显示数据库连接超时处理方法
    havel定理
    Skier
    扩展欧几里德算法(待补充)
    next_permutation(全排列)
  • 原文地址:https://www.cnblogs.com/yemaozistar/p/4137521.html
Copyright © 2020-2023  润新知