java设计模式---工厂模式

java设计模式—工厂模式

何为工厂模式

顾名思义,工厂是生产产品的地方,我们需要什么产品就去什么工厂中拿就行了,而不需要关心它是如何制作的。对于我们面向对象的编程来说,当需要某一个对象的时候,运用工厂设计模式,我们可以不去关心该对象的复杂创建过程,创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

作为一种创建类模式,在任何需要生成复杂对象的地方,都可以使用工厂方法模式。有一点需要注意的地方就是复杂对象适合使用工厂模式,而简单对象,特别是只需要通过 new 就可以完成创建的对象,无需使用工厂模式。如果使用工厂模式,就需要引入一个工厂类,会增加系统的复杂度。

应用实例

比如说:我们需要组装一台电脑,我们只需要将自己选择的cup型号和主板型号告诉组装电脑的工程师即可,我们不需要关系整个的生产以及组装过程。

框架设计

这里写图片描述

分析:client客户、ComputerEngineer电脑工程师,主要方法是makeComputer组装电脑,以及prepareHardwares准备硬件、CpuFactory负责生产各种型号的cup、MainboardFactory负责生产各种型号的主板,IntelCpu和AmdCpu都是Cpu的具体实现。IntelMainboard和AmdMainboard都是Mainboard的具体实现。

代码

按照上面的框架设计,从下往上进行代码的编写。

1.首先定义接口

Cpu接口

/**
 * @author LiHaiNan
 * @version V1.0
 * @Description: Cpu接口
 * @date 下午 9:25 2017/9/20 0020
 */
public interface Cpu {
    /**
    * @Title: calculate
    * @Description: 计算数据
    * @Date:下午 9:26 2017/9/20 0020
    * @author LiHaiNan
    * @param: void
    * @return: void
    */
     void calculate();
}

Mainboard接口

/**
 * @author LiHaiNan
 * @version V1.0
 * @Description: Mainboard接口
 * @date 下午 9:27 2017/9/20 0020
 */
public interface Mainboard {
    /**
    * @Title: installCpu
    * @Description: 安装cup的板子
    * @Date:下午 9:27 2017/9/20 0020
    * @author LiHaiNan
    * @param: void
    * @return: void
    */
    void installCpu();
}
2.编写两个接口的具体实现
/**
 * @author LiHaiNan
 * @version V1.0
 * @Description: AmdCpu
 * @date 下午 9:31 2017/9/20 0020
 */
public class AmdCpu implements Cpu {
    //针脚数
    private int pins=500;

    @Override
    public void calculate() {
        System.out.println("AmdCpu-pins{}"+pins);
    }
}
/**
 * @author LiHaiNan
 * @version V1.0
 * @Description: IntelCpu
 * @date 下午 9:31 2017/9/20 0020
 */
public class IntelCpu implements Cpu {
    //针脚数
    private int pins=600;

    @Override
    public void calculate() {
        System.out.println("IntelCpu-pins{}"+pins);
    }
}
/**
 * @author LiHaiNan
 * @version V1.0
 * @Description: AmdMainboard
 * @date 下午 9:31 2017/9/20 0020
 */
public class AmdMainboard implements Mainboard{
    //cup插槽孔数
    private int cpuHoles=500;

    @Override
    public void installCpu() {
        System.out.println("AmdMainboard-cpuHoles{}"+cpuHoles);
    }
/**
 * @author LiHaiNan
 * @version V1.0
 * @Description: IntelMainboard
 * @date 下午 9:31 2017/9/20 0020
 */
public class IntelMainboard  implements Mainboard{
    //cup插槽孔数
    private int cpuHoles=600;

    @Override
    public void installCpu() {
        System.out.println("IntelMainboard-cpuHoles{}"+cpuHoles);
    }
}
3.生产cpu与mainboard的工厂
/**
 * @author LiHaiNan
 * @version V1.0
 * @Description: CpuFactory
 * @date 下午 9:43 2017/9/20 0020
 */
public class CpuFactory {
    /**
     * @Title: createCpu
     * @Description: 创建cpu的工厂
     * @Date:下午 9:47 2017/9/20 0020
     * @author LiHaiNan
     * @param: String type
     * @return: Cpu
     */
    public Cpu createCpu(String type){
        Cpu cpu=null;
        if ("Intel".equals(type)){
            cpu=new IntelCpu();
        }else if ("Amd".equals(type)){
            cpu=new AmdCpu();
        }
        return cpu;
    }
}
/**
 * @author LiHaiNan
 * @version V1.0
 * @Description: MainboardFactory
 * @date 下午 9:43 2017/9/20 0020
 */
public class MainboardFactory {
    /**
    * @Title: createCpu
    * @Description: 创建主板的工厂
    * @Date:下午 9:47 2017/9/20 0020
    * @author LiHaiNan
    * @param: String type
    * @return: Mainboard
    */
    public Mainboard createMainboard(String type){
        Mainboard mainboard=null;
        if ("Intel".equals(type)){
            mainboard=new IntelMainboard();
        }else if ("Amd".equals(type)){
            mainboard=new AmdMainboard();
        }
        return mainboard;
    }
}
4.电脑工程师
/**
 * @author LiHaiNan
 * @version V1.0
 * @Description: ComputerEngineer
 * @date 下午 9:52 2017/9/20 0020
 */
public class ComputerEngineer {
    //组装机器所用的产品
    private Cpu cpu=null;
    private Mainboard mainboard=null;
    //生产产品所用的工厂
    CpuFactory cpuFactory=new CpuFactory();
    MainboardFactory mainboardFactory=new MainboardFactory();

    public void makeComputer(String cpuType,String mainboardType){
        //找到工厂获取
        cpu=cpuFactory.createCpu(cpuType);
        mainboard=mainboardFactory.createMainboard(mainboardType);
        //测试产品是否可用
        cpu.calculate();
        mainboard.installCpu();
    }
}
5.客户调用
/**
 * @author LiHaiNan
 * @version V1.0
 * @Description: 客户调用
 * @date 下午 10:01 2017/9/20 0020
 */
public class Main {

    public static void main(String[] args){
        ComputerEngineer computerEngineer=new ComputerEngineer();
        computerEngineer.makeComputer("Intel","Intel");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java设计模式是一组经过实践验证的面向对象设计原则和模式,可以帮助开发人员解决常见的软件设计问题。下面是常见的23种设计模式: 1. 创建型模式(Creational Patterns): - 工厂方法模式(Factory Method Pattern) - 抽象工厂模式(Abstract Factory Pattern) - 单例模式(Singleton Pattern) - 原型模式(Prototype Pattern) - 建造者模式(Builder Pattern) 2. 结构型模式(Structural Patterns): - 适配器模式(Adapter Pattern) - 桥接模式(Bridge Pattern) - 组合模式(Composite Pattern) - 装饰器模式(Decorator Pattern) - 外观模式(Facade Pattern) - 享元模式(Flyweight Pattern) - 代理模式(Proxy Pattern) 3. 行为型模式(Behavioral Patterns): - 责任链模式(Chain of Responsibility Pattern) - 命令模式(Command Pattern) - 解释器模式(Interpreter Pattern) - 迭代器模式(Iterator Pattern) - 中介者模式(Mediator Pattern) - 备忘录模式(Memento Pattern) - 观察者模式(Observer Pattern) - 状态模式(State Pattern) - 策略模式(Strategy Pattern) - 模板方法模式(Template Method Pattern) - 访问者模式(Visitor Pattern) 4. 并发型模式(Concurrency Patterns): - 保护性暂停模式(Guarded Suspension Pattern) - 生产者-消费者模式(Producer-Consumer Pattern) - 读写锁模式(Read-Write Lock Pattern) - 信号量模式(Semaphore Pattern) - 线程池模式(Thread Pool Pattern) 这些设计模式可以根据问题的特点和需求来选择使用,它们提供了一些可复用的解决方案,有助于开发高质量、可维护且易于扩展的软件系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值