简单工厂模式
案例:顾客到商店买电脑
1、首先,创建一个电脑公有的接口
/**
*电脑接口
*/
public interface IComputer {
//电脑都能用于开发
public void kaiFa() ;
}
2、创建具体实体,实现公有的接口,这里是两个品牌电脑
/**
* 苹果电脑实现类
*/
public class AppleComputer implements IComputer{
@Override
public void kaiFa() {
System.out.println("用苹果电脑开发程序!");
}
}
/**
* 联想电脑实现类
*/
public class LenovoComputer implements IComputer{
@Override
public void kaiFa() {
System.out.println("用联想电脑开发程序");
}
}
3、创建电脑工厂,通过参数来判断客户需要什么电脑
备注:这里需要创建一个静态方法,所以简单工厂模式又称为静态工厂模式
/**
*电脑工厂
*/
public class ComputerFactory {
private static IComputer computer=null;
public static IComputer getComputer(String name) {
if(name.equals("apple")) {
computer = new AppleComputer();
}else if(name.equals("lenovo")) {
computer = new LenovoComputer();
}
return computer;
}
}
4、创建客户类
/**
* 客户类
*/
public class Client {
public static void main(String[] args) {
//实例化工厂
ComputerFactory computerFactory=new ComputerFactory();
//通过具体参数来创建具体实物
IComputer computer=computerFactory.getComputer("apple");
System.out.println(computer);
computer.kaiFa();
}
}
运行:创建出了具体对象!
工厂方法模式
还是上面那个案例,只不过是升华版。
1、创建接口,创建实体类,实现接口,这里一笔带过,和上面一样
/**
*电脑接口
*/
public interface IComputer {
//电脑都能用于开发
public void kaiFa() ;
}
//创建实体1
public class LenovoComputer implements IComputer{
@Override
public void kaiFa() {
System.out.println("用联想电脑开发程序");
}
}
//创建实体2
public class AppleComputer implements IComputer{
@Override
public void kaiFa() {
System.out.println("用苹果电脑开发程序!");
}
}
2、创建一个工厂接口,目的:为了创建具体的工厂
public interface IComputerFactory {
//创建具体的实体
public IComputer createComputer();
}
3、为每一个实体创建单独的工厂,实现创建工厂接口
//联想工厂
public class LenovoFactory implements IComputerFactory{
@Override
public IComputer createComputer() {
//单独工厂创建单独实体
IComputer computer=new LenovoComputer();
return computer;
}
}
//苹果工厂
public class AppleFactory implements IComputerFactory{
@Override
public IComputer createComputer() {
//单独工厂创建单独实体
IComputer computer = new AppleComputer();
return computer;
}
}
4、客户类
/**
* 客户类
*/
public class Client {
public static void main(String[] args) {
//实例化工厂
IComputerFactory computerFactory=new LenovoFactory();
//通过工厂创建具体实体类
IComputer computer=computerFactory.createComputer();
//调用实体类的方法
computer.kaiFa();
}
}
运行结果: