工厂模式(一)

8 篇文章 0 订阅


工厂方法的目的:
将实现类和实体类中间多加一层,使实体类统一调度,而我们只需要接触那个中间层,使实现类和实体类解耦(简单说就是在main函数里不要new实体类的对象,由创建该对象的工厂去控制,这时候new的是工厂,而不是main)

D:.
├─method
│      Consumer.java
│      Filco.java
│      FilcoFactory.java
│      KeyBoard.java
│      KeyBoardFactory.java
│      Leopold.java
│      LeopoldFactory.java
│
└─simple
        Consumer.java
        Filco.java
        KeyBoard.java
        KeyBoardFactory.java
        Leopold.java

简单工厂模式

简单工厂就是,将创建对象的地方从main移到了工厂类里面,这样我们可以统一调度而非在main函数里一个一个new对象

package com.cai.factory.simple;

public class Consumer {
    public static void main(String[] args) {
        KeyBoard F = KeyBoardFactory.getKeyboard("F");
        KeyBoard L = KeyBoardFactory.getKeyboard("L");

        F.name();
        L.name();
    }
}

package com.cai.factory.simple;

public interface KeyBoard {
    void name();
}

package com.cai.factory.simple;

public class KeyBoardFactory {
    public static KeyBoard getKeyboard(String keyboard){
        if ("F".equals(keyboard)){
            return new Filco();
        } else if ("L".equals(keyboard)) {
            return new Leopold();
        } else {
            System.out.println("???");
            return null;
        }
    }
}

package com.cai.factory.simple;

public class Filco implements KeyBoard{
    @Override
    public void name() {
        System.out.println("圣手二代");
    }
}

package com.cai.factory.simple;

public class Leopold implements KeyBoard{
    @Override
    public void name() {
        System.out.println("FC660M");
    }
}

工厂方法模式

通过去创建一个新的工厂来获取所需的对象,加的是工厂而不是所需的对象,这样子,符合了开闭原则,需要多加一个对象的时候,就多创建类,而不是在原来的代码基础上修改了

public class Consumer {
    public static void main(String[] args) {
        KeyBoard f = new FilcoFactory().getKeyBoard();
        KeyBoard l = new LeopoldFactory().getKeyBoard();

        f.name();
        l.name();
    }
}
package com.cai.factory.method;

public interface KeyBoard {
    void name();
}

package com.cai.factory.method;

public interface KeyBoardFactory {
    KeyBoard getKeyBoard();
}

package com.cai.factory.method;

public class FilcoFactory implements KeyBoardFactory{
    @Override
    public KeyBoard getKeyBoard() {
        return new Filco();
    }
}

package com.cai.factory.method;

public class LeopoldFactory implements KeyBoardFactory{
    @Override
    public KeyBoard getKeyBoard() {
        return new Leopold();
    }
}

package com.cai.factory.method;

public class Filco implements KeyBoard {
    @Override
    public void name() {
        System.out.println("圣手二代");
    }
}

package com.cai.factory.method;

public class Leopold implements KeyBoard {
    @Override
    public void name() {
        System.out.println("FC660M");
    }
}

总结

对于
设计模式,有7大原则

开闭原则
里氏替换原则
依赖倒置原则
单一职责原则
接口隔离原则
迪米特法则
合成复用原则

简单工厂模式不符合开闭原则,但是实际上较常使用,工厂方法模式虽然符合了开闭原则,但是维护代码麻烦,代码量多

从狂神那里看的,在这些地方用了工厂模式

  • JDK中Calendar的getInstance方法
  • JDBC中的Connection对象的获取
  • Spring中IOC容器创建管理bean对象
  • 反射中Class对象的newlnstance方法

我有空去看一看,有看的话,会再发博客的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值