DesignPattern_工厂模式(工厂方法 抽象工厂)_02、03

简单工厂模式

基本介绍

简单工厂模式是属于创建型模式,是工厂模式的一种。简单工厂是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单使用的模式
简单工厂模式:定义了一个创建对象的类,由这个类来封装实例化对象的行为(代码)
在软件开发中,当我们会用到大量的创建某种、某类或者某批对象时,就会使用到工厂模式

代码实现
/**
 * @author huangqh
 * @create 2020/9/10 0:42
 * @Note 简单工厂
 */
public class SimpleFactoryTest {
    public static void main(String[] args) {
        App qq = SendFactory.getInstance().create("QQ");
        qq.send("HHHHH");
        App weChat = SendFactory.getInstance().create("WeChat");
        weChat.send("OHHHHH");
    }
}
//Application 抽象类
 abstract class App{
    abstract void send(String msg);
}
//Application 实现类 WeChat
class Wechat extends App{
    void send(String msg) {
        System.out.println("Wechat send :"+msg);
    }
}
//Application 实现类  QQ
class QQ extends App{
    void send(String msg) {
        System.out.println("QQ send :"+msg);
    }
}
//
class SendFactory{
    //匿名内部类 单例
    private SendFactory(){}
    static class  InnerClass{
            private static final SendFactory INSTANCE =new SendFactory();
    }
    public static SendFactory getInstance(){

        return InnerClass.INSTANCE;
    }
    //根据传参 工厂创建不同对象
    App create(String app){
        if ("QQ".equals(app))
            return new QQ();
        else if ("WeChat".equals(app))
            return new Wechat();
        else
            return null;
    }
}

工厂方法模式

基本介绍

工厂方法模式:定义一个创建对象的抽象方法,由子类决定要实例化的类。工厂方法模式将对象的实例化推迟到子类

代码实现
/**
 * @author huangqh
 * @create 2020/9/11 0:18
 * @Note 工厂方法
 */
public interface Maker {
    void process(String material);
}

//生产键盘
class Keyboard implements Maker {
    public void process(String material) {
        System.out.println("use " + material + " maker keyboard");
    }
}

//生产鼠标
class Mouse implements Maker {
    public void process(String material) {
        System.out.println("use " + material + " maker mouse");
    }
}
//抽象工厂
abstract class Factory{
    //子类来实例化具体对象
    public abstract Maker maker();

    public void process(String material){
        Maker maker = maker();
        maker.process(material);
    }
}
class KeyboardFactory extends Factory{
    //键盘制造工厂,只需要提供键盘制造设备
    public Maker maker() {
        return new Keyboard();
    }
}
class MouseFactory extends Factory{
    //鼠标制造工厂,只需要提供鼠标制造设备
    public Maker maker() {
        return new Mouse();
    }
}

抽象工厂模式

基本介绍

抽象工厂模式:定义了一个interface用于创建相关或有依赖关系的对象簇,而无需指明具体实现的类
抽象工厂模式可以将简单工厂模式和工厂方法模式进行整合
从设计层面看,抽象工厂模式就是对简单工厂模式的改进
将工厂抽象成两层,AbsFactory(抽象工厂)和具体实现的工厂子类。程序员可以根据对象类型使用对应的工厂子类。这样将单个的简单工厂类变成了工厂簇,更利于代码的维护和扩展

代码示例
/**
 * @author huangqh
 * @create 2020/9/11 1:03
 * @Note  键盘  联想键盘和惠普键盘是同一等级(类别)的产品  联想键盘和联想鼠标是同一个产品簇
 */
//机器:用于生产键盘
public interface KeyBoardMachine {
    public void process(String material);
}
//用于生产惠普键盘
class HPKeyBoard implements KeyBoardMachine{
    public void process(String material) {
        System.out.println("使用 "+material+" 生产惠普键盘");
    }
}
//用于生产联想键盘
class LenovoKeyBoard implements KeyBoardMachine{
    public void process(String material) {
        System.out.println("使用 "+material+" 生产联想键盘");
    }
}
//机器 用于生产鼠标
interface MouseMachine{
    public void process(String material);
}
//生产惠普鼠标
class HPMouse implements MouseMachine{
    public void process(String material) {
        System.out.println("使用 "+material+" 生产惠普鼠标");
    }
}
//生产联想鼠标
class LenovoMouse implements MouseMachine{
    public void process(String material) {
        System.out.println("使用 "+material+" 生产联想鼠标");
    }
}
//抽象工厂
abstract class Factory{
    //生产键盘
    abstract KeyBoardMachine produceKeyBoard();
    //生产鼠标
    abstract MouseMachine produceMouse();
}
//联想工厂    生产联想鼠标和键盘
class LenovoFactory extends Factory{
    KeyBoardMachine produceKeyBoard() {
        return new LenovoKeyBoard();
    }
    MouseMachine produceMouse() {
        return new LenovoMouse();
    }
}
//惠普工厂  生产惠普鼠标和键盘
class HPFactory extends Factory{

    KeyBoardMachine produceKeyBoard() {
        return new HPKeyBoard();
    }

    MouseMachine produceMouse() {
        return new HPMouse();
    }
}
class Test{
    public static void main(String[] args) {
        Factory lenovoFactory = new LenovoFactory();
        lenovoFactory.produceKeyBoard().process("亚克力");
        lenovoFactory.produceMouse().process("亚克力");
        Factory hpFactory = new HPFactory();
        hpFactory.produceKeyBoard().process("亚克力");
        hpFactory.produceMouse().process("亚克力");

    }
}

工厂模式小结

工厂模式的意义:将实例化对象的代码提取出来,放在一个类中同一管理和维护,达到和主项目的依赖关系的解耦。从而提高项目的扩展性和维护性
三种工厂模式:简单工厂模式、工厂方法模式、抽象工厂模式
设计模式的依赖抽象原则

创建对象实例时,不要直接new类,而是把这个new类的动作放在一个工厂的方法中,并返回,有的书上说,变量不要直接持有具体类的引用
不要让类继承具体类,而是继承抽象类或是实现interface
不要覆盖基类中已经实现的方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值