设计模式-创建型模式-工厂模式(工厂三兄弟)

简介:

设计模式-创建型模式-工厂模式(工厂三兄弟)
工厂模式分为简单工厂,工厂方法,抽象工厂。

简单工厂模式

一个接口,三个具体类,一个工厂,通过选择,生产出对应的对象。

package demo2;

public class Circle implements Shape{
    public Circle() {
        
    }

    @Override
    public void draw() {        
    }
    
}
package demo2;

public class Rectangle implements Shape{
    public Rectangle() {
        
    }
    
    @Override
    public void draw() {        
    }

}
package demo2;

public interface Shape {
    void draw();
}
package demo2;

public class ShapeFactory {
    public static Shape getShape(String shapeType) {
        if(shapeType == null) {
            return null;
        }
        
        if (shapeType == "Circle") {
            return new Circle();
        }
        
        if (shapeType == "Rectangle") {
            return new Rectangle();
        }
        
        if (shapeType == "Square") {
            return new Square();
        }
        return null;
    }
}
package demo2;

public class Square implements Shape{
    public Square() {
        
    }

    @Override
    public void draw() {        
    }
}
package demo2;

public class Test {
    public static void main(String[] agrs) {
        Shape circle = new ShapeFactory().getShape("Circle");
        circle.draw();
    }
}

利用反射改进工厂模式

由于违反开放-封闭原则,每次都要去修改源代码,所以直接使用反射机制。
将类传入,使用泛型+反射,生产出对象。

package demo2;

public class ShapeFactory2 {
    @SuppressWarnings("deprecation")
    public static Object getClass(Class<? extends Shape> clazz) {    // 代表通配的是Shape的子类,即都为借口的子类
        Object obj = null;
        
            try {
                obj = Class.forName(clazz.getName()).newInstance();
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        return obj;
        
    }
}
package demo2;

public class Test {
    public static void main(String[] agrs) {
        Shape circle = (Circle)ShapeFactory2.getClass(Circle.class);
        circle.draw();
    }
}

工厂方法

每个对象有对应的工厂,将原先的工厂拆分。

package demo2;

public class CircleFactory implements Factory{

    @Override
    public Shape getShape() {
        return new Circle();
    }

}
package demo2;

public class RectangleFactory implements Factory{

    @Override
    public Shape getShape() {
        return new Rectangle();
    }

}
package demo2;

public class SquareFactory implements Factory{

    @Override
    public Shape getShape() {
        return new Square();
    }

}
package demo2;

public class Test {
    public static void main(String[] agrs) {
        Factory circleFactory = new CircleFactory();
        Shape circle = circleFactory.getShape();
        circle.draw();
    }
}

抽象工厂

两个抽象接口,一个为产品,一个为工厂,进行生产

产品

public interface Gun{
    public void shooting();
}

子弹

public interface Bullet{
    public void load();
}

ak类

public class AK implements Gun{
    @Override
    public void shooting(){};
}

对应子弹

public class AK_Bullet implements Bullet{
    @Override
    public void load(){};
}

m4

public class M4 implements Gun{
    @Override
    public void shooting(){};
}

对应子弹

public class M4_Bullet implements Bullet{
    @Override
    public void load(){};
}

工厂

public interface Factory{
    public Gun produceGun();
    public Bullet produceBullet();
}

具体工厂
ak

public class AK_Factory implements Factory {
    @Override
    public Gun produceGun(){
        return new AK();
    }
    @Override
    public Bullet produceBullet(){
        return new AK_Bullete();
    }
}

M4

public class M4_Factory implements Factory{
    @Override
    public Gun produceGun(){
        return new M4();
    }
    @Override
    public Bullet produceBullet(){
        return new M4_Bullet();
    }
}

www.iming.info

目录
相关文章
|
3月前
|
设计模式 Java
【设计模式】工厂模式(定义 | 特点 | Demo入门讲解)
【设计模式】工厂模式(定义 | 特点 | Demo入门讲解)
78 2
|
25天前
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。 结构型模式分为以下 7 种: • 代理模式 • 适配器模式 • 装饰者模式 • 桥接模式 • 外观模式 • 组合模式 • 享元模式
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
|
25天前
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是"将对象的创建与使用分离”。这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。创建型模式分为5种:单例模式、工厂方法模式抽象工厂式、原型模式、建造者模式。
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
|
2月前
|
设计模式 架构师 Java
设计模式之 5 大创建型模式,万字长文深剖 ,近 30 张图解!
设计模式是写出优秀程序的保障,是让面向对象保持结构良好的秘诀,与架构能力与阅读源码的能力息息相关,本文深剖设计模式之 5 大创建型模式。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
设计模式之 5 大创建型模式,万字长文深剖 ,近 30 张图解!
|
2月前
|
设计模式 前端开发 JavaScript
JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式
本文深入探讨了JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式,结合电商网站案例,展示了设计模式如何提升代码的可维护性、扩展性和可读性,强调了其在前端开发中的重要性。
47 2
|
4月前
|
设计模式
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
这篇文章详细解释了工厂模式,包括简单工厂、工厂方法和抽象工厂三种类型。每种模式都通过代码示例展示了其应用场景和实现方法,并比较了它们之间的差异。简单工厂模式通过一个工厂类来创建各种产品;工厂方法模式通过定义一个创建对象的接口,由子类决定实例化哪个类;抽象工厂模式提供一个创建相关或依赖对象家族的接口,而不需要明确指定具体类。
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
|
5月前
|
设计模式 存储 负载均衡
【五】设计模式~~~创建型模式~~~单例模式(Java)
文章详细介绍了单例模式(Singleton Pattern),这是一种确保一个类只有一个实例,并提供全局访问点的设计模式。文中通过Windows任务管理器的例子阐述了单例模式的动机,解释了如何通过私有构造函数、静态私有成员变量和公有静态方法实现单例模式。接着,通过负载均衡器的案例展示了单例模式的应用,并讨论了单例模式的优点、缺点以及适用场景。最后,文章还探讨了饿汉式和懒汉式单例的实现方式及其比较。
【五】设计模式~~~创建型模式~~~单例模式(Java)
|
5月前
|
设计模式 JavaScript 前端开发
从工厂到单例再到策略:Vue.js高效应用JavaScript设计模式
【8月更文挑战第30天】在现代Web开发中,结合使用JavaScript设计模式与框架如Vue.js能显著提升代码质量和项目的可维护性。本文探讨了常见JavaScript设计模式及其在Vue.js中的应用。通过具体示例介绍了工厂模式、单例模式和策略模式的应用场景及其实现方法。例如,工厂模式通过`NavFactory`根据用户角色动态创建不同的导航栏组件;单例模式则通过全局事件总线`eventBus`实现跨组件通信;策略模式用于处理不同的表单验证规则。这些设计模式的应用不仅提高了代码的复用性和灵活性,还增强了Vue应用的整体质量。
78 1
|
5月前
|
设计模式 Java
Java 设计模式之谜:工厂模式与抽象工厂模式究竟隐藏着怎样的神奇力量?
【8月更文挑战第30天】在Java编程中,设计模式为常见问题提供了高效解决方案。工厂模式与抽象工厂模式是常用的对象创建型设计模式,能显著提升代码的灵活性、可维护性和可扩展性。工厂模式通过定义创建对象的接口让子类决定实例化哪个类;而抽象工厂模式则进一步提供了一个创建一系列相关或相互依赖对象的接口,无需指定具体类。这种方式使得系统更易于扩展和维护。
47 1
|
5月前
|
设计模式 算法 开发者
深入理解工厂模式与策略模式:设计模式的灵活应用
深入理解工厂模式与策略模式:设计模式的灵活应用