class MacbookComputer implements Computer{
@Override
public void printComputer() {
System.out.println("This is a mac");
}
}
class SurfacebookComputer implements >Computer{
@Override
public void printComputer() {
System.out.println("This is a surface");
}
}
class ComputerFactory{
public static Computer getInstance(String type){
Computer computer = null;
if (type.equals("macbook")){
computer = new MacbookComputer();
} else if (type.equals("surface")){
computer = new SurfacebookComputer();
}
return computer;
}
}
public class Client {
public static void main(String[] args) {
Client client = new Client();
Scanner scanner = new Scanner(System.in);
System.out.println("请输入电脑型号");
String type = scanner.nextLine();
Computer computer = ComputerFactory.getInstance(type);
client.buyComputer(computer);
}
public void buyComputer(Computer computer){
computer.printComputer();
}
}
优点:
简单易于实现
把类的实例化交给工厂,易于解耦
缺点:
添加具体产品需要修改工厂违反OCP开放封闭原则
工厂方法模式-产品族
工厂方法模式:定义一个用来创建对象的接口,让子类决定实例化哪个工厂
组成:
一个抽象产品类
多个具体产品类
一个抽象工厂
多个具体工厂(每个产品对应一个具体工厂)
代码:
interface Computer{
void printComputer();
}
class MacbookComputer implements Computer{
@Override
public void printComputer() {
System.out.println("This is a mac");
}
}
class SurfacebookComputer implements Computer{
@Override
public void printComputer() {
System.out.println("This is a surface");
}
}
class AppleFactory implements ComputerFactory{
@Override
public Computer createComputer() {
return new MacbookComputer();
}
}
class MsFactory implements ComputerFactory{
@Override
public Computer createComputer() {
return new SurfacebookComputer();
}
}
public class Client {
public static void main(String[] args) {
Client client = new Client();
ComputerFactory factory = new AppleFactory();
client.buyComputer(factory.createComputer());
}
public void buyComputer(Computer computer){
computer.printComputer();
}
}
优点:
降低了代码的耦合度,对象的生成交给子类去完成
实现了开放封闭原则,每次添加子产品,不需要修改原代码
缺点:
增加了代码量,每一个具体产品都需要一个具体工厂
当增加抽象产品也就是添加一个其他产品族,需要修改工厂,违背了OPC
抽象工厂模式
抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类
组成:
多个抽象产品类
具体产品类
抽象工厂类-声明(一组)返回抽象产品的方法
具体工厂类-生产(一组)具体产品
代码:
interface Computer{
void printComputer();
}
class MacbookComputer implements Computer{
@Override
public void printComputer() {
System.out.println("This is a mac");
}
}
class SurfacebookComputer implements Computer{
@Override
public void printComputer() {
System.out.println("This is a surface");
}
}
interface OperatingSystem{
void printSystem();
}
class MacOsSystem implements OperatingSystem{
@Override
public void printSystem() {
System.out.println("This is a mac os");
}
}
class WindowsSystem implements OperatingSystem{
@Override
public void printSystem() {
System.out.println("This is a window 8");
}
}
class AppleFactory implements ProductionFactory{
@Override
public Computer createComputer() {
return new MacbookComputer();
}
@Override
public OperatingSystem createSystem() {
return new MacOsSystem();
}
}
class MsFactory implements ProductionFactory{
@Override
public Computer createComputer() {
return new SurfacebookComputer();
}
@Override
public OperatingSystem createSystem() {
return new WindowsSystem();
}
}
public class Client {
public static void main(String[] args) {
Client client = new Client();
ProductionFactory factory = new AppleFactory();
Computer computer = factory.createComputer();
OperatingSystem system = factory.createSystem();
client.buyComputer(computer);
client.use(system);
}
public void buyComputer(Computer computer){
computer.printComputer();
}
public void use(OperatingSystem s){
s.printSystem();
}
}