前两天去京东终面,叫手写一下单例模式和简单工厂模式。当时学简单工厂模式是在spring的学习中,它是spring采用的主要设计模式,简单工厂模式是类的创建模式。
简单工厂模式是类的创建模式,又叫做静态工厂方法。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。通常它根据自变量的不同返回不同类的实例。
简单工厂模式的实质是由一个工厂类根据传入的参数,动态的决定应该创建出哪一个产品类的实例。
简单工厂模式的构成:‘
(1)工厂类角色: 是简单工厂模式的核心,工厂类在客户端的直接调用下创建产品对象,它往往由一个具体类实现。
(2)抽象产品角色:抽象产品角色由一个借口或者抽象类实现。
(3)具体产品角色:由一个具体类实现。
package com.test.simplefactory;
// 抽象产品角色. 抽象类或者接口
public interface Person
{
public String sayHello(String name);
public String sayGoodbye(String name);
}
package com.test.simplefactory;
// 具体产品角色1,需要实现接口
public class Chinese implements Person
{
@Override
public String sayHello(String name)
{
return name + "你好";
}
@Override
public String sayGoodbye(String name)
{
return name + "再见";
}
}
package com.test.simplefactory;
// 具体产品角色2
public class American implements Person
{
@Override
public String sayHello(String name)
{
return name + ",hello";
}
@Override
public String sayGoodbye(String name)
{
return name + ",goodbye";
}
}
package com.test.simplefactory;
// 工厂类,作用就是用来生成对象
public class PersonFactory
{
// 作用是用来生成对象的,所以返回值肯定也是Person类型
public Person getPerson(String name)
{
if ("chinese".equals(name))
{
return new Chinese();
} else if ("american".equals(name))
{
return new American();
} else
{
return null;
}
}
}
这样,客户端与具体的实现类(Chinese ,American)已经没有强耦合的关系了。我们的请求是像工厂发出的,我们需要的产品也是工厂帮助我们生成的。