工厂设计模式

工厂设计模式有三种,一种是简单工厂模式,一种是工厂方法模式,还有一种是抽象工厂模式,下面对三种工厂模式做一个简单总结

简单工厂模式

定义:专门定义一个类用来创建其他类的实例,被创建的实例通常都具有共同的父类
以买电脑为例,客户需要什么电脑,只需要输入类型编号就能获取该电脑,类图如下所示
在这里插入图片描述

package www.cqw.java;

import java.util.Scanner;


interface Computer{
    void printcomputer();
}
class MacbookProComputer implements Computer {
    public void printcomputer() {
        System.out.println("这是一台MacbookPro");
    }
}
class SurfaceBookComputer implements Computer{
    public void printcomputer(){
        System.out.println("这是一台SurfaceBook");
    }
}
//如果需要更多选择,以下为例增加其他类
class AlienwareComputer implements Computer{
    public void printcomputer(){
        System.out.println("这是一台Alienware");
    }
}
class  ComputerFactory{
    public static Computer getInstance(String type){
        Computer computer = null;
        if(type.equals("macbook")){
             computer = new MacbookProComputer();
        }else if(type.equals("surface")){
             computer = new SurfaceBookComputer();
        }else if(type.equals("Alienware")){
             computer = new AlienwareComputer();
        }
        return computer;
    }
}
public class Client {
    public void buy(Computer computer){
        computer.printcomputer();
    }

    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.buy(computer);

    }
}

组成
一个抽象产品类
N个具体产品类
一个工厂类
简单工厂模式优点
简单易于实现
把类的实例化交给工厂,易于解耦
简单工厂模式缺点
违反了ocp开放封闭原则

工厂方法模式

定义一个用来创建对象的接口,让子类决定实例化哪一个工厂
在这里插入图片描述

package www.cqw.java;

import java.util.Scanner;

interface Computer{
    void printcomputer();
}
class MacbookProComputer implements Computer {
    public void printcomputer() {
        System.out.println("这是一台MacbookPro");
    }
}
class SurfaceBookComputer implements Computer{
    public void printcomputer(){
        System.out.println("这是一台SurfaceBook");
    }
}
class AlienwareComputer implements Computer{
    public void printcomputer(){
        System.out.println("这是一台Alienware");
    }
}

interface ComputerFactory{
    Computer creatComputer = null;
}
class MsFactory implements ComputerFactory{
    public Computer creatComputer(){
        return new SurfaceBookComputer();
    }
}
class AppleFactory implements ComputerFactory {
    public Computer creatComputer() {
        return new MacbookProComputer();
    }
}

public class Client {


    public static void main(String[] args) {
        ComputerFactory factory = new AppleFactory();
        Computer computer = ((AppleFactory) factory).creatComputer();
        computer.printcomputer();


    }
}

组成
一个抽象产品类
多个具体产品类
一个抽象工厂
多个具体工厂(每个产品族对应一个具体工厂)
工厂方法模式优点
降低了代码耦合度,对象的生成交给子类完成
实现了开放封闭原则,每次添加子产品不需要修改原有代码
工厂方法模式缺点
增加了代码量,每个具体产品都需要一个具体工厂
当增加产品抽象也就是添加一个其他产品族需要修改工厂,违背ocp

抽象工厂模式

提供一个创建一系列相关或相互依赖对象的接口(抽象工厂,多条产品线),而无需指定他们具体的类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值