设计模式——简单工厂模式,静态工厂模式

下面我们来看一个场景:

假如客户需要一辆卡车(car),有的客户需要一辆挖土机(navvy),则我们可以抓住他们的共性,可以run

可以定义一个Moveable接口

1 public interface Moveable {
2     void run();
3 }
 1 public class Car implements Moveable{
 2     
 3     /*//自己实例化一个静态的Car对象  由于只能产生一个所以也叫单例
 4     private static Car car=new Car();
 5     
 6     public static Car getInstance(){
 7         return car;
 8     }
 9     */
10     
11     public void run(){
12         System.out.println("老司机开车了.....快上车没时间解释了.....");
13     }
14 }
package com.hone.design.singleton;

public class navvy implements Moveable {

    @Override
    public void run() {
        System.out.println("快来挖掘机学校吧。。。。。");
    }
}

定义一个client类,用于实现客户自己的想法:

 1 public class Client {
 2     public static void main(String[] args) {
 3     
 4         
 5     /*
 6            * 这里面无论再加上什么东西只需要new一个新的对象即可,
 7         */
 8     Moveable moveable=new car();
 9         moveable.run();
10     }
11 }
12         

如果每次客户需要一辆车,都得自己去制作一辆新的,效率会有多么低啊?因此我们就出现了工厂的概念,能不能每一个工厂都将car  navvy制作好了之后,客户需要了可以自己去拿呢?

当然是可以额。

1 public class CarFactory {
2       //  Car工厂   这里有一个createCar()方法,将制作好的car对象返回回来
3 
4     public Moveable createCar(){
5         return new Car();
6     }
1 public class NavvyFactory extends VehicleFactory{
2     
3     public Moveable createPlane(){
4         return new Plane();
5     }
6

client类

 1 public class Client {
 2     public static void main(String[] args) {
 3     
 4         
 5     
 6     /*
 7      * 这里先利用工厂生产车的对象,然后在调用车对象的run方法
 8      */
 9     CarFactory factory=new CarFactory();
10     Moveable car=factory.createCar();
11     car.run();

这里面factory有太多相同的方法,我们在抽象一下,可以不可以将factory定义为一个接口或者一个抽象类呢,让carFactory和NavvyFactory从Factory工厂中继承或者实现呢?

1 public abstract class VehicleFactory {
2        //这里的返回值当然是一个Moveable接口的对象
3     public abstract Moveable create();
4 
5 }
1 public class CarFactory extends VehicleFactory{
2 
3     @Override
4     public Moveable create() {
5         return new Car();
6     }
8 }
1 public class NavvyFactory extends VehicleFactory{
2 
3     @Override
4     public Moveable create() {
5         return new navvy();
6     }
7 }

client的实现:

public class Test {
    public static void main(String[] args) {
    
    //加入我们将工厂对象抽象出来,不必每次都new一个新的工厂对象出来    
    VehicleFactory factory=new NavvyFactory();
    Moveable plane=factory.create();
    plane.run();
        
        
    }
}

所以我们可以知道简单工厂是什么东西?

也就是当我们需要很多有共性的对象的时候,我们可以定义一个抽象的类或者接口,让其他具体的类从里面实现。

工厂方法模式是有一个抽象的父类定义公共接口,子类负责生成具体的对象,这样做的目的是将类的实例化操作延迟到子类中完成。 可以减少代码的冗余。

 

 

1 <html>
2     <body>
3         <a href="http://www.cnblogs.com/xiaxj/p/6497564.html">下篇文章,什么是静态代理?</a>
4     </body>
5 </html>

 

posted @ 2017-03-06 10:38  SnailsCoffee  阅读(249)  评论(0编辑  收藏  举报