工厂设计模式 -- 买电脑

第三方:工厂类,将客户端的产生对象与具体子类分离,提取 (解耦) 到专门的工厂类中产生对象。

1. 简单工厂模式

专门定义一个类用来创建其它类的实例,被创建的实例通常都具有共同的父类。即将客户端产生商品的行为 (也就是所谓的new对象) 提取到一个新的类中,把这个类叫做工厂类。

  • 特点:
    ① 一个抽象产品类 (接口,如computer)。
    ② 多个具体的产品类 (如MacbookPro,Surface)。
    ③ 一个工厂 (负责生产所有具体商品,客户端与工厂交互,不与具体产品交互)。
interface Computer {
    void printComputer();
}

class Macbookpro implements Computer {
    public void printComputer() {
        System.out.println("This is a mac");
    }
}

class Surface implements Computer {
    public void printComputer() {
        System.out.println("This is a surface");
    }
}

class AlienWare implements Computer {
    public void printComputer() {
        System.out.println("This is a alienware");
    }
}

//工厂类,专门用于生产电脑
class ComputerFactory {
    //返回值是电脑
    public static Computer getInstance(String str) {
        if(str.equals("mac")) {
            return new Macbookpro();
        } else if(str.equals("surface")) {
            return new Surface();
        } else if(str.equals("alienware")) {
            return new AlienWare();
        } else {
            System.out.println("没有找到指定商品!!!");
            return null;
        }
    }
}

public class Client {
    public static void main(String[] args) {
        Computer computer = ComputerFactory.getInstance(args[0]); 
        computer.printComputer();
    }
}

在这里插入图片描述
这里我们相当于是创建生产电脑的工厂,客户需要购买什么样的电脑,只要输入类型编号就可以获取该电脑。将类的实例化交给工厂易于解耦

  • 优点:简单易于实现,把类的实例化交给工厂,易于解耦。
  • 缺点:添加具体产品需要修改工厂违反OCP开放封闭原则。
2. 工厂方法模式

当多个产品呈现出家族式特征时(如微软系、苹果系),为了保证不同产品系之间的隐私性,不同产品系有自己的工厂。

  • 特点
    ① 一个抽象产品类 (接口,如computer)。
    ② 多个具体的产品类 (如MacbookPro,Surface)。
    ③ 一个抽象工厂。
    ④ 多个具体工厂 (如微软工厂、苹果工厂)。
interface Computer {
    void printComputer();
}

class Macbookpro implements Computer {
    public void printComputer() {
        System.out.println("This is a mac");
    }
}

class Surface implements Computer {
    public void printComputer() {
        System.out.println("This is a surface");
    }
}

interface ComputerFactory {
    Computer creatComputer();
}

class AppleFactory implements ComputerFactory {
    public Computer creatComputer() {
        return new Macbookpro();
    }
}

class MsFactory implements ComputerFactory {
    public Computer creatComputer() {
        return new Surface();
    }
}

public class Client1 {
    public static void main(String[] args) {
        Computer computer = new AppleFactory().creatComputer();
        computer.printComputer();
    }
}

在这里插入图片描述
工厂方法模式是针对每个产品提供一个工厂类,在客户端中判断使用哪个工厂类去创建对象。

  • 优点
    ① 降低了代码耦合度,对象的生成交给子类去完成;
    ② 实现了开放封闭原则,即每次添加子产品,不需要修改原有代码。
  • 缺点
    ① 增加了代码量,每个具体产品都需要一个具体工厂 ;
    ② 当增加抽象产品也就是添加一个其他产品族时需要修改工厂,违背了OCP原则。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值