java设计模式——工厂模式

  最近我在学习java设计模式,随笔记录一下自己学习的过程,也顺便分享给大家,希望对大家有所帮助。我这是第一次写技术随笔,如果大家觉得我有写的不对的地方,欢迎大家指出,也欢迎大家提出自己的观点。

  今天我学习的是工厂模式,工厂模式有三种:1.简单工厂模式;2.工厂方法模式;3.抽象工厂模式。废话不多说,接下来分别是三种模式的总结:

  • 简单工厂模式

  1.介绍:

  简单工厂模式是所有工厂模式的祖先,工厂方法模式和抽象工厂模式都是在简单工厂模式的基础上优化出来的,它只是“粗糙”的将对象的创建和使用进行分离,至于为什么说它是粗糙的,先上完代码再进行解释。

  2.代码实现:

  水果包括苹果、香蕉、橘子等。为了管理方便,把水果抽象成接口,让苹果、香蕉、橘子去实现水果接口,再加一个工厂类来输出水果。

 

/**
 * 水果接口
 * 
 * @author wyh
 *
 */
public interface Fruit {
    public void print();
}

 

/**
 * 苹果类
 * 
 * @author wyh
 *
 */
public class Apple implements Fruit{

    @Override
    public void print() {
        System.out.println("我是苹果!");
    }

}

 

/**
 * 香蕉类
 * 
 * @author wyh
 *
 */
public class Banana implements Fruit{

    @Override
    public void print() {
        System.out.println("我是香蕉!");
    }
    
}
/**
 * 橙子类
 * 
 * @author wyh
 *
 */
public class Orange implements Fruit{

    @Override
    public void print() {
        System.out.println("我是橘子!");
    }

}
/**
 * 工厂类
 * 
 * @author wyh
 *
 */
public class StaticFactory {
    private static final int APPLE_TYPE = 1;
    private static final int ORANGE_TYPE = 2;
    private static final int BANANA_TYPE = 3;
    
    /**
     * 水果工厂
     * 
     * @param type
     * @return
     */
    public static Fruit getFruit(int type) {
        if (type == APPLE_TYPE) {
            return new Apple();
        } else if (type == ORANGE_TYPE) {
            return new Orange();
        } else if (type == BANANA_TYPE) {
            return new Banana();
        } else {
            return null;
        }
    }
}

/**
 * 测试类
 * 
 * @author wyh
 *
 */
public class TestMain {
public static void main(String[] args) {
        /*
         * 简单工厂模式测试
         * 
         */
        Fruit apple = StaticFactory.getFruit(StaticFactory.APPLE_TYPE);//得到苹果
        apple.print();//输出:我是苹果!
        Fruit orange = StaticFactory.getFruit(StaticFactory.ORANGE_TYPE);//得到橘子
        orange.print();//输出:我是橘子!
        Fruit banana = StaticFactory.getFruit(StaticFactory.BANANA_TYPE);//得到香蕉
        banana.print();//输出:我是香蕉!
    }
}

  以上是简单工厂模式的代码,通过代码可以看出代码实现了:各种水果对象由StaticFactory工厂统一创建。但是有个弊端,我如果要添加一种水果梨,那么就必须修改StaticFactory类,这违反了开闭原则(对扩展开发,对修改关闭);而且StaticFactory能创建多种水果对象,也违反了单一职责原则。所以我认为简单工厂模式是比较“粗糙”。

 工厂方法模式,抽象工厂模式抽时间再补充

  

  

    

    

    

  

posted @ 2018-12-09 14:52  start起舞  阅读(110)  评论(0)    收藏  举报