既然是工厂模式,为了自己加深理解,例子还是用工厂可以造出来的东西吧,比如手机,当然也可以是其他任何产品。
目前市场主要的手机系统类型为安卓、苹果、微软。可能各自的优缺点不一样
假设优点如下:
苹果:
适合玩游戏
安卓:
适合打电话
微软:
适合发短信
1.简单工厂模式
简单工厂模式是一个由工厂对象决定创建出哪一种产品类的实例,又叫静态工厂方法模式。
我们先把手机功能简化一下,假设只能打电话,发短信,玩游戏,新建一个手机的抽象接口
Phone
import java.util.*;
public interface Phone {
void callNumber();
void sendMessage(String message);
void playgames(int gameName);
}
每种手机都要实现基本的功能,下面是苹果的实现类:
import java.util.*;
public class Apple implements Phone {
public void callNumber() {
// TODO: implement
}
public void sendMessage(String message) {
// TODO: implement
}
public void playgames(int gameName) {
// TODO: implement
}
}
这样每次使用手机类的时候可以根据手机的用途去new实例,代码会更加容易维护。也会更简洁,项目中很少用,但是可以作为入门了解
2.工厂方法模式
工厂方法模式是简单工厂的进一步抽象和推广,由于工厂方法模式具有多态性,工厂模式方法既保持了简单工厂的优点,同时又克服了它的缺点,简单工厂模式中的工厂类负责创建实例,那么如果有新的机型添加,就要修改工厂类,这样也不利于进一步松耦合。工厂方法模式中核心工厂类不负责所有实例的创建,而是将具体的创建工作交给了子类去完成,这个核心类成为了一个抽象工厂角色。
工厂方法模式设计到一下四个角色的概念:
1. 抽象工厂角色
工厂方法模式的核心,创建产品的类必须实现该接口
2. 具体工厂角色
该角色实现了抽象工厂接口,具体如何创建产品就是在该类中实现
3. 抽象产品角色
所有产品的超类,负责实现产品共性的抽象定义
4. 具体产品角色
该角色实现了抽象产品接口,负责具体不同产品的业务逻辑
承接上面的工作创建抽象工厂角色
新建创建机型001的具体工厂角色
抽象产品角色与具体产品角色已经定义过了Phone与Phone001-003
具体使用: