/** * 所有工厂模式都是为了让对象的调用者和对象创建过程分离,简化调用端代码,便于维护 * 简单地对象创建则不需要使用工厂模式 */ /** * 简单工厂(静态工厂) * * 1、创建产品接口 * 2、创建工厂类 * 3、工厂类通过传入参数的不同返回不同的产品 * * 优点: * 1、代码调用简单,类之间的关系也较简单 * 缺点: * 1、拓展性稍差,如果需要增加新的产品,则需要修改已有代码(工厂类),不符合开闭原则(可扩展、禁修改) */ public class SimpleFactroy { public static void main(String[] args) { ArsenalFactory.getArms("AK47").attack(); ArsenalFactory.getArms("喀秋莎").attack(); ArsenalFactory.getArms("如意金箍棒").attack(); } } /** * 工厂类,通过该类获取产品实例 */ class ArsenalFactory{ public static IArm getArms(String name){ if("AK47".equals(name)){ return new AK47(); }else if("喀秋莎".equals(name)){ return new Katyusha(); }else if("如意金箍棒".equals(name)){ return new MonkeyKingBar(); }else{ return null; } } } /** * 产品接口 */ interface IArm{ public void attack(); } /** * 以下为具体产品 */ class AK47 implements IArm{ @Override public void attack() { System.out.println("AK47 突突突"); } } class Katyusha implements IArm{ @Override public void attack() { System.out.println("喀秋莎 嗖嗖嗖"); } } class MonkeyKingBar implements IArm{ @Override public void attack() { System.out.println("妖怪 看棒"); } }
/** * 工厂方法 * * 1、定义产品接口 * 2、定义工厂抽象类 * 3、通过工厂创建具体产品 * * 优点: * 1、方便对产品进行更换 * 2、方便增加新的产品 * 缺点: * 1、产品多了类就会多 [一个产品=一个产品类+一个产品类工厂](类爆炸) * 2、产品接口 修改后其他实现类都要改 */ public class FactoryMethod { public static void main(String[] args) { // VehicleFactory v = new PlaneFactory(); VehicleFactory v = new CarFactory(); v.create().run(); } } /** * 产品接口 */ interface IMoveable{ public void run(); } /** * 工厂抽象类 */ abstract class VehicleFactory{ abstract IMoveable create(); } /** * 以下为具体产品及相应工厂 */ class Plane implements IMoveable{ @Override public void run() { System.out.println("大飞机 呼呼呼"); } } class PlaneFactory extends VehicleFactory{ public IMoveable create(){ return new Plane(); } } class Car implements IMoveable{ @Override public void run() { System.out.println("小汽车 嘀嘀嘀"); } } class CarFactory extends VehicleFactory{ public IMoveable create(){ return new Car(); } }
抽象工厂start
/** * 抽象工厂类 */ public abstract class AbstractFactory { public abstract Weapon createWeapon(); public abstract Vehicle createVehicle(); public abstract Food createFood(); } /** * 抽象工厂对应的抽象产品类 */ abstract class Weapon{ public abstract void fire(); } abstract class Vehicle{ public abstract void run(); } abstract class Food{ public abstract void eat(); }
/** * 产品系列1 */ public class DefaultFactory extends AbstractFactory{ @Override public Weapon createWeapon() { return new AK47(); } @Override public Vehicle createVehicle() { return new Tank(); } @Override public Food createFood() { return new Beef(); } } class AK47 extends Weapon{ @Override public void fire() { System.out.println("AK47 嗒嗒嗒"); } } class Tank extends Vehicle{ @Override public void run() { System.out.println("坦克 咕隆隆"); } } class Beef extends Food{ @Override public void eat() { System.out.println("吃牛肉"); } }
/** * 产品系列2 */ public class MagicFactory extends AbstractFactory{ @Override public Weapon createWeapon() { return new MagicStick(); } @Override public Vehicle createVehicle() { return new MagicBroom(); } @Override public Food createFood() { return new MagicBread(); } } class MagicStick extends Weapon{ @Override public void fire() { System.out.println("魔法棒 变"); } } class MagicBroom extends Vehicle{ @Override public void run() { System.out.println("魔法扫帚 飞"); } } class MagicBread extends Food{ @Override public void eat() { System.out.println("魔法面包 呃"); } }
/** * 抽象工厂 * 主要解决 产品系列 的功能 * * 1、定义 产品系列工厂 抽象类 * 2、定义每个产品的抽象类 * 3、定义具体产品、具体产品工厂 * * AbstractFactory --> 定义产品的标准(方法) * DefaultFactory、MagicFactory.... --> 实现具体的产品(方法) * * 优点: * 1、方便对产品系列进行增加、替换 * 缺点: * 1、新增产品的话,每个工厂实现都要改 */ public class Client { public static void main(String[] args) { // AbstractFactory f = new DefaultFactory(); AbstractFactory f = new MagicFactory(); f.createWeapon().fire(); f.createVehicle().run(); f.createFood().eat(); } }
抽象工厂end
相关推荐
尽管如此,简单工厂模式对于一些简单且产品种类较少的场景仍然非常适用,尤其是在学习设计模式的初级阶段,它是一个很好的起点。通过深入理解这个模式,可以帮助开发者更好地理解和运用其他更复杂的设计模式,如工厂...
《设计模式——Java语言中的应用》是一本专为Java开发者深入理解面向对象设计而编写的经典书籍。...无论是初级开发者还是经验丰富的程序员,都应该不断探索和实践设计模式,以提升自己的专业技能。
初级程序员可以学习设计模式的基本概念和应用,高级程序员能够从书中掌握更多高级技巧,而系统分析师可以通过设计模式来解决项目中遇到的复杂问题。 总体而言,设计模式是软件工程领域的宝贵财富,而《JAVA设计模式...
简单工厂模式作为设计模式的入门级模式,适合初级学习者理解和实践。在简单工厂模式中,一个工厂类负责创建对象,而客户端代码则不再直接创建对象,而是通过调用工厂类的静态方法来获取所需的实例。 在Java中,我们...
《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。也可以作为高效学生深入学习设计模式的参考读物! 第1章 设计模式基础 第2章 简单工厂 第3章 外观模式 第4章 ...
《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。也可以作为高效学生深入学习设计模式的参考读物! 第1章 设计模式基础 第2章 简单工厂 第3章 外观模式 第4章 ...
《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。也可以作为高效学生深入学习设计模式的参考读物! 第1章 设计模式基础 第2章 简单工厂 第3章 外观模式 第4章 ...
《Java设计模式之禅》是一本深入浅出讲解设计模式的书籍,书...综上所述,本书不仅是一本关于设计模式的入门书,也是对设计模式应用的深入探讨,无论是对于初级开发者、高级程序员,还是系统分析师,都能从中获得价值。
《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。也可以作为高效学生深入学习设计模式的参考读物! 第1章 设计模式基础 第2章 简单工厂 第3章 外观模式 第4章 ...
简单工厂模式是一种较为初级的工厂设计模式,它通过一个中心工厂类来负责创建对象,这个工厂类通常包含一个静态方法,根据传入的参数或条件来决定创建哪个具体类的实例。简单工厂模式的优点在于客户端无需关注对象的...
设计模式是软件工程中的一种最佳实践,它提供了一套经过时间考验的解决方案,用来解决在设计可复用、可维护的...无论是初级开发者还是经验丰富的工程师,都应该不断探索和熟练运用设计模式,以实现更高质量的软件开发。
- **初级开发者**:可以学习JavaScript的基础知识和一些简单的设计模式。 - **中级开发者**:可以通过学习设计模式进阶,了解更高级的设计模式和技术细节。 - **高级开发者**:可以深入了解设计模式的应用,以及如何...
1. 创建型模式(Creational Patterns):主要处理对象的创建,如单例模式(Singleton)、工厂模式(Factory Method)、抽象工厂模式(Abstract Factory)、建造者模式(Builder)和原型模式(Prototype)。...
创建型模式主要关注对象的创建,提供了灵活创建对象的方法,包括单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。 2. 结构型模式 结构型模式涉及如何组合类和对象以获得更大的结构。包括适配器模式、...
- **抽象工厂模式**:提供一个创建一系列相关或相互依赖对象的接口,无需指定具体类。 - **建造者模式**:将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。 - **原型模式**:通过复制...
对于不同级别的程序员,设计模式能够提供不同程度的帮助和指导,从初级程序员的基础编程技能提升,到高级程序员的系统设计和架构,再到系统分析师的项目问题解决,设计模式都能发挥关键作用。 在应用设计模式时,...