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

1.概述

        工厂模式分为简单工厂、工厂方法、抽象工厂模式

        工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。利用工厂模式可以降低程序的耦合性,为后期的维护修改提供了很大的便利。将选择实现类、创建对象统一管理和控制。从而将调用者跟我们的实现类解耦

2.简单工厂模式

        简单工厂模式相当于是一个工厂中有各种产品,创建在一个类中,客户无需知道具体产品的名称,只需要知道产品类所对应的参数即可。但是工厂的职责过重,而且当类型过多时不利于系统的扩展维护

简单案例:

public interface Car {

public void run();

}

 

public class AoDi implements Car {

public void run() {

System.out.println("我是奥迪汽车..");

}

}

public class JiLi implements Car {

 

public void run() {

System.out.println("我是吉利汽车...");

}

}

public class CarFactory {

 

public static Car createCar(String name) {

if (StringUtils.isEmpty(name)) {

             return null;

}

if(name.equals("奥迪")){

return new AoDi();

}

if(name.equals("吉利")){

return new JiLi();

}

return null;

}

}

 

 

 

public class RunMain {

public static void main(String[] args) {

Car aodi  =CarFactory.createCar("奥迪");

Car jili  =CarFactory.createCar("吉利");

aodi.run();

jili.run();

}

}

2.1单工厂的优点/缺点

优点:简单工厂模式能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。明确区分了各自的职责和权力,有利于整个软件体系结构的优化。

缺点:很明显工厂类集中了所有实例的创建逻辑,容易违反GRASPR的高内聚的责任分配原则

3.工厂方法模式

       工厂方法模式Factory Method,又称多态性工厂模式。在工厂方法模式中,核心的工厂类不再负责所有的产品的创建,而是将具体创建的工作交给子类去做。该核心类成为一个抽象工厂角色,仅负责给出具体工厂子类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。

public interface Car {

public void run();

}

 

public class AoDi implements Car {

public void run() {

System.out.println("我是奥迪汽车..");

}

}

public class JiLi implements Car {

 

public void run() {

System.out.println("我是吉利汽车...");

}

}

public class JiLiFactory implements CarFactory {

 

public Car createCar() {

 

return new JiLi();

}

}

 

 

public class AoDiFactory implements CarFactory {

public Car createCar() {

return new AoDi();

}

}

 

 

public class RunMain {

public static void main(String[] args) {

Car aodi = new AoDiFactory().createCar();

Car jili = new JiLiFactory().createCar();

aodi.run();

jili.run();

}

}

4.抽象工厂模式

       抽象工厂简单地说是工厂的工厂,抽象工厂可以创建具体工厂,由具体工厂来产生具体产品。

//发动机

public interface Engine {

 

void run();

 

void start();

}

 

class EngineA implements Engine {

 

public void run() {

      System.out.println("转的快!");

}

 

public void start() {

System.out.println("启动快,自动档");

}

 

}

 

class EngineB implements Engine {

 

public void run() {

      System.out.println("转的慢!");

}

 

public void start() {

System.out.println("启动快,手动档");

}

 

 

//座椅

public interface Chair {

  void run();

}

 

 class ChairA implements Chair{

 

public void run() {

System.out.println("可以自动加热!");

}

 

}

 class ChairB implements Chair{

 

public void run() {

System.out.println("不能加热!");

}

 

}

public interface CarFactory {

// 创建发动机

Engine createEngine();

// 创建座椅

Chair createChair();

}

public class JiLiFactory implements CarFactory  {

 

public Engine createEngine() {

 

return new EngineA();

}

 

public Chair createChair() {

 

return new ChairA();

}

 

}

public class Client002 {

 

public static void main(String[] args) {

CarFactory carFactory=new JiLiFactory();

Engine engine=carFactory.createEngine();

engine.run();

engine.start();

 

}

 

}

 5.简单工厂、工厂方法、抽象工厂之小结、区别

    简单工厂 : 用来生产同一等级结构中的任意产品。(不支持拓展增加产品)

 工厂方法 :用来生产同一等级结构中的固定产品。(支持拓展增加产品)   

    抽象工厂 :用来生产不同产品族的全部产品。(不支持拓展增加产品;支持增加产品族)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值