再看设计模式--工厂模式

        之前就有读过《headfirst设计模式》一书,就像往常一样,读完了就读完了,就没然后了。为了造飞机,现在必须开始重新读取了,就从最常出现的工厂模式开始吧。

        首先,工厂模式分为工厂方法和抽象工厂两种。工厂方法通过提供一个接口(方法),让子类去决定生产哪一种具体的产品,而抽象工厂则是在这个基础之上,达到生产多种具体的产品。

        首先瞅瞅工厂方法模式,本人工厂方法所用到的类图:


        首先,抽象出产品:

/**
 * 抽象的产品
 */
public abstract class Car {

    protected Integer price;
    protected String name;
    protected String country;

    public Car() {
    }

    public Car(String name, Integer price) {
        this.price = price;
        this.name = name;
    }

    //省略getset
}
        将产品进行分类,分为国产和进口,不过这一步也可以省略的·····
/**
 * 其实这个类可以省略,不过想分国产和进口车,
 * 故而把这个类设为abstract,而具体的产品还是
 * 继承该类的子类。
 */
public abstract class ChinaCar extends Car {

    public ChinaCar() {
    }

    public ChinaCar(String name, Integer price) {
        super(name, price);
        this.country = "国产";
    }
}

        接下来,是真正被成产出来的产品:

/**
 * 具体的汽车产品
 */
public class SpeedChinaCar extends ChinaCar {

    private Integer speed;

    public SpeedChinaCar() {
    }

    public SpeedChinaCar(String name, Integer price, Integer speed) {
        super(name, price);
        this.speed = speed;
    }

    public Integer getSpeed() {
        return speed;
    }

    public void setSpeed(Integer speed) {
        this.speed = speed;
    }
}

        定义一个抽象类的工厂,生产的任务由于种类繁多而导致本部工厂干脆停止生产,所以定义为抽象方法,交给下面的具体工厂去实现:

/**
 * 工厂抽象类
 */
public abstract class CarFactory {

    //核心生产方法
    public abstract Car createCar(String type);

    public void orderCar(String type) {
        Car car = createCar(type);
        System.out.println("我是"+car.getCountry()+" "+car.getName() + ",价值:" + car.getPrice() + "元钱。。。。");
    }
}

        真正进行生产的工厂:

/**
 * 国产车工厂生产真正具体的产品
 */
public class ChinaCarFactory extends CarFactory {
    @Override
    public Car createCar(String type) {
        //通过提供的type确定要生产国产车的那种具体类型的车
        if (type.equals("speed"))
            return new SpeedChinaCar("红旗", 30, 250);
        else if (type.equals("SUV"))
            return new SUVChinaCar("荣威", 500, 250);
        else
            return null;

    }
}

        找到4s店,并认识一下:

public class CarStore {

    private CarFactory carFactory;


    public void showCar(String type) {
        getCarFactory().orderCar(type);
    }

    public CarFactory getCarFactory() {
        return carFactory;
    }

    public void setCarFactory(CarFactory carFactory) {
        this.carFactory = carFactory;
    }


}

        让4s店先搞个现车出来瞅瞅:

  public static void main(String args[]) {

        //找到4s
        CarStore carStore=new CarStore();
        //确定要哪国车就联系哪个国家的工厂
        carStore.setCarFactory(new GermanyCarFactory());
        //确定汽车类型,展示订车信息
        carStore.showCar("speed");

        //德国车太贵,还是看看国产
        carStore.setCarFactory(new ChinaCarFactory());
        //看看跑车
        carStore.showCar("speed");
        //再看看SUV
        carStore.showCar("SUV");
    }
}

结果:


        所以,工厂方法就是将生产的任务交给子类去实现,因为产品的种类繁多。如果直接以具体(本部)工厂生产这种方式进行生产,随着具体产品种类的不断增多,将会给本部工厂造成巨大的压力,将会造成代码无限的拉长。因此,引入工厂方法,可以将生产任务转交给子工厂,可以避免本部的生产压力,同时还可以不断的扩张,从而达到了 解耦 的目的。

        so,这就是工厂方法。

/**
 * 简单工厂模式即只让本部进行生产,一种规范,不是设计模式
 */
public class Factory {
    public Car String(String type) {
        Car car = null;
        if (type.equals("GermanySpeed")) {
            car = new SpeedGermanyCar();
            return car;
        } else if (type.equals("GermanySUV")) {
            car = new SUVGermanyCar();
            return car;
        } else if (type.equals("ChinaSpeed")) {
            car = new SpeedChinaCar();
            return car;
        } else if (type.equals("ChinaSUV")) {
            car = new SUVChinaCar();
            return car;
        } else
            return null;
    }
}


  • 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、付费专栏及课程。

余额充值