设计模式系列(四)---工厂模式

设计模式系列(四)---工厂模式

目录

工厂模式的种类

  • 工厂模式分为两类:工厂方法模式和抽象工厂模式
  • 简单工厂是工厂方法模式的一种特例

简单工厂模式

代码实现

abstract class Person
{
    public abstract void sayHello();
}

class GDPerson extends Person
{
    public void sayHello()
    {
        System.out.println("我是广东人");
    }
}

class BJPerson extends Person
{
    public void sayHello()
    {
        System.out.println("我是北京人");
    }
}
class PersonFactory
{
    static final int GD=1;
    static final int BJ=2;
    public static Person createPerson(int area)
    {
        switch (area)
        {
            case GD:
                return new GDPerson();
            case BJ:
                return new BJPerson();
            default:
                return null;
        }
    }
}
public class Demo5 {
    public static void main(String[] args) {
        Person gdPerson=PersonFactory.createPerson(PersonFactory.GD);
        gdPerson.sayHello();
        Person bjPerson=PersonFactory.createPerson(PersonFactory.BJ);
        bjPerson.sayHello();
    }
}

开放封闭原则

  • 开放封闭原则是面向对象原则的核心
  • 对扩展开放,意味着需求或变化是们能够对现有代码进行扩展,以适应新的状况
  • 对修改封闭,意味这类一旦设计完成,就能够独立完成其工做,而不要对类进行任何修改

分析

  • 传入要建立的对象的类型,然根据传入的类型,建立相应的对象
  • 调用者没必要知道对象是如何建立的,只要传入相应的参数就能够html

  • 可是,若是这个时候须要添加其余的type,那么就要增长case,也就是对设计完成的类进行修改,而这样就违背了开放封闭原则设计模式

工厂方法模式

代码实现

public interface PersonFactory
{
    Person createPerson();
}
class GDFactory implements PersonFactory
{

    public Person createPerson() {
        return new GDPerson();
    }
    
}
class BJFactory implements PersonFactory
{
    public Person createPerson()
    {
        return new BJPerson();
    }
}

public class Demo5 {
    public static void main(String[] args) {
        PersonFactory gdFactory=new GDFactory();
        Person gdPerson=gdFactory.createPerson();
        PersonFactory bjFactory=new BJFactory();
        Person bjPerson=bjFactory.createPerson();
        
    }
}

分析

  • 定义一个用于建立对象的接口,让子类决定实例化哪一个类,在这里体现为建立一个PersonFactory接口,根据要实例化的类(Person的类型),建立实现这个接口的一个工厂类(BJFactory或者是GDFactory)。
  • 这样的话,当增长一个新的类的时候,不用对一个已经设计完成的类进行修改,这样就不会破坏开放封闭原则。
  • 可是随着类的增多(好比SHPeroson和USAPerson),那么就要对应建立多个工厂类

抽象工厂模式

abstract class Animal
{
    public abstract void sayHello();
}

class Cat extends Animal
{
    public void sayHello()
    {
        System.out.println("瞄");
    }
}
public interface Factory
{
    Person createPerson();
    Animal createAnimal();
}

class Factory1 implements Factory
{
    public Person createPerson()
    {
        return new BJPerson();
    }
    public Animal createAnimal()
    {
        return new Cat();
    }
}

分析

  • 对比工厂方法模式。它与工厂方法惟一的区别就是工厂的接口里是再也不是建立一个类型(不止是Person还有Animal)。

对比

  • 能够体会到,建立一个实例的时候,咱们将判断的逻辑放到工程的类的内部(switch或者if else)。而工厂方法模式的话,则是将判断的逻辑转移到客户端,要建立什么类型的实例,就建立对应的工厂来获取对象。

我以为分享是一种精神,分享是个人乐趣所在,不是说我以为我讲得必定是对的,我讲得可能不少是不对的,可是我但愿我讲的东西是我人生的体验和思考,是给不少人反思,也许给你一秒钟、半秒钟,哪怕说一句话有点道理,引起本身心里的感触,这就是我最大的价值。(这是我喜欢的一句话,也是我写博客的初衷)

做者:jiajun 出处: http://www.cnblogs.com/-new/
本文版权归做者和博客园共有,欢迎转载,但未经做者赞成必须保留此段声明,且在文章页面明显位置给出原文链接,不然保留追究法律责任的权利。若是以为还有帮助的话,能够点一下右下角的【推荐】,但愿可以持续的为你们带来好的技术文章!想跟我一块儿进步么?那就【关注】我吧。设计

相关文章
相关标签/搜索